aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authornicole mazzuca <mazzucan@outlook.com>2020-11-12 10:16:24 -0800
committerGitHub <noreply@github.com>2020-11-12 10:16:24 -0800
commit2dc708898ad89c2a74461fa50cb907bcd5b92305 (patch)
tree4788b042e34f1cd1756a25cc234eccbfc8febe42 /toolsrc/src
parent11b4a16bcadd252fd9721204262ab2bb6d09464e (diff)
downloadvcpkg-2dc708898ad89c2a74461fa50cb907bcd5b92305.tar.gz
vcpkg-2dc708898ad89c2a74461fa50cb907bcd5b92305.zip
[vcpkg] Add x-ignore-lock-failures (#14397)
* [vcpkg] Add disable-lock options This should fix #14281 at least as a stopgap. Additionally, adds better errors. * billy CRs * change from "disable-lock" to "allow-spurious-lock-failures" * billy cr
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg/vcpkgcmdarguments.cpp11
-rw-r--r--toolsrc/src/vcpkg/vcpkgpaths.cpp13
2 files changed, 20 insertions, 4 deletions
diff --git a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp
index 8c393a1cf..b3f42e6c7 100644
--- a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp
+++ b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp
@@ -293,6 +293,7 @@ namespace vcpkg
{FEATURE_PACKAGES_SWITCH, &VcpkgCmdArguments::feature_packages},
{BINARY_CACHING_SWITCH, &VcpkgCmdArguments::binary_caching},
{WAIT_FOR_LOCK_SWITCH, &VcpkgCmdArguments::wait_for_lock},
+ {IGNORE_LOCK_FAILURES_SWITCH, &VcpkgCmdArguments::ignore_lock_failures},
{JSON_SWITCH, &VcpkgCmdArguments::json},
};
@@ -663,6 +664,14 @@ namespace vcpkg
from_env(DEFAULT_VISUAL_STUDIO_PATH_ENV, default_visual_studio_path);
{
+ const auto vcpkg_disable_lock = System::get_environment_variable(IGNORE_LOCK_FAILURES_ENV);
+ if (vcpkg_disable_lock.has_value() && !ignore_lock_failures.has_value())
+ {
+ ignore_lock_failures = true;
+ }
+ }
+
+ {
const auto vcpkg_overlay_ports_env = System::get_environment_variable(OVERLAY_PORTS_ENV);
if (const auto unpacked = vcpkg_overlay_ports_env.get())
{
@@ -923,6 +932,8 @@ namespace vcpkg
constexpr StringLiteral VcpkgCmdArguments::PRINT_METRICS_SWITCH;
constexpr StringLiteral VcpkgCmdArguments::WAIT_FOR_LOCK_SWITCH;
+ constexpr StringLiteral VcpkgCmdArguments::IGNORE_LOCK_FAILURES_SWITCH;
+ constexpr StringLiteral VcpkgCmdArguments::IGNORE_LOCK_FAILURES_ENV;
constexpr StringLiteral VcpkgCmdArguments::JSON_SWITCH;
diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp
index cd438fef3..a3ab21629 100644
--- a/toolsrc/src/vcpkg/vcpkgpaths.cpp
+++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp
@@ -259,6 +259,7 @@ namespace vcpkg
installed = process_output_directory(
filesystem, manifest_root_dir, args.install_root_dir.get(), "vcpkg_installed", VCPKG_LINE_INFO);
+
const auto vcpkg_lock = root / ".vcpkg-root";
if (args.wait_for_lock.value_or(false))
{
@@ -268,12 +269,16 @@ namespace vcpkg
{
m_pimpl->file_lock_handle = filesystem.try_take_exclusive_file_lock(vcpkg_lock, ec);
}
+
if (ec)
{
- System::printf(
- System::Color::error, "Failed to take the filesystem lock on %s:\n", fs::u8string(vcpkg_lock));
- System::printf(System::Color::error, " %s\n", ec.message());
- Checks::exit_fail(VCPKG_LINE_INFO);
+ if (ec == std::errc::device_or_resource_busy || args.ignore_lock_failures.value_or(false))
+ {
+ System::printf(
+ System::Color::error, "Failed to take the filesystem lock on %s:\n", fs::u8string(vcpkg_lock));
+ System::printf(System::Color::error, " %s\n", ec.message());
+ Checks::exit_fail(VCPKG_LINE_INFO);
+ }
}
m_pimpl->m_manifest_doc = load_manifest(filesystem, manifest_root_dir);