diff options
| author | nicole mazzuca <mazzucan@outlook.com> | 2020-11-12 10:16:24 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-12 10:16:24 -0800 |
| commit | 2dc708898ad89c2a74461fa50cb907bcd5b92305 (patch) | |
| tree | 4788b042e34f1cd1756a25cc234eccbfc8febe42 /toolsrc/src | |
| parent | 11b4a16bcadd252fd9721204262ab2bb6d09464e (diff) | |
| download | vcpkg-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.cpp | 11 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/vcpkgpaths.cpp | 13 |
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); |
