fix(generate-lockfile): hold lock before querying index

This commit is contained in:
Weihang Lo 2024-03-26 16:53:45 -04:00
parent 5587af7caf
commit f1c139624f
No known key found for this signature in database
GPG Key ID: D7DBF189825E82E7
3 changed files with 6 additions and 8 deletions

View File

@ -166,12 +166,17 @@ pub fn update_lockfile(ws: &Workspace<'_>, opts: &UpdateOptions<'_>) -> CargoRes
Ok(())
}
/// Prints lockfile change statuses.
///
/// This would acquire the package-cache lock, as it may update the index to
/// show users latest available versions.
pub fn print_lockfile_changes(
gctx: &GlobalContext,
previous_resolve: Option<&Resolve>,
resolve: &Resolve,
registry: &mut PackageRegistry<'_>,
) -> CargoResult<()> {
let _lock = gctx.acquire_package_cache_lock(CacheLockMode::DownloadExclusive)?;
if let Some(previous_resolve) = previous_resolve {
print_lockfile_sync(gctx, previous_resolve, resolve, registry)
} else {

View File

@ -256,11 +256,6 @@ fn resolve_with_registry<'gctx>(
false
};
if print {
// We only want one Cargo at a time resolving a crate graph since this can
// involve a lot of frobbing of the global caches.
let _lock = ws
.gctx()
.acquire_package_cache_lock(CacheLockMode::DownloadExclusive)?;
ops::print_lockfile_changes(ws.gctx(), prev.as_ref(), &resolve, registry)?;
}
Ok(resolve)

View File

@ -266,11 +266,9 @@ fn generate_lockfile_holds_lock_and_offline() {
.run();
p.cargo("generate-lockfile --offline")
.with_status(101)
.with_stderr_contains(
"\
[..]thread 'main' panicked[..]
[..]package cache lock is not currently held[..]
[LOCKING] 2 packages
",
)
.run();