aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg_Files.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src/vcpkg_Files.cpp')
-rw-r--r--toolsrc/src/vcpkg_Files.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/toolsrc/src/vcpkg_Files.cpp b/toolsrc/src/vcpkg_Files.cpp
index d0e55a215..599c6f5ef 100644
--- a/toolsrc/src/vcpkg_Files.cpp
+++ b/toolsrc/src/vcpkg_Files.cpp
@@ -1,6 +1,7 @@
#include "pch.h"
#include "vcpkg_Files.h"
#include "vcpkg_System.h"
+#include <thread>
namespace vcpkg::Files
{
@@ -115,7 +116,22 @@ namespace vcpkg::Files
}
virtual std::uintmax_t remove_all(const fs::path & path, std::error_code& ec) override
{
- return fs::stdfs::remove_all(path, ec);
+ // Working around the currently buggy remove_all()
+ std::uintmax_t out = fs::stdfs::remove_all(path, ec);
+
+ for (int i = 0; i < 5 && this->exists(path); i++)
+ {
+ using namespace std::chrono_literals;
+ std::this_thread::sleep_for(i * 100ms);
+ out += fs::stdfs::remove_all(path, ec);
+ }
+
+ if (this->exists(path))
+ {
+ System::println(System::Color::warning, "Some files in %s were unable to be removed. Close any editors operating in this directory and retry.", path.string());
+ }
+
+ return out;
}
virtual bool exists(const fs::path & path) const override
{