diff --git a/src/cargo/ops/cargo_generate_lockfile.rs b/src/cargo/ops/cargo_generate_lockfile.rs index d6fdc3d94a0..e303d868da4 100644 --- a/src/cargo/ops/cargo_generate_lockfile.rs +++ b/src/cargo/ops/cargo_generate_lockfile.rs @@ -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 { diff --git a/src/cargo/ops/resolve.rs b/src/cargo/ops/resolve.rs index 1042c897bcf..31a37551414 100644 --- a/src/cargo/ops/resolve.rs +++ b/src/cargo/ops/resolve.rs @@ -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) diff --git a/tests/testsuite/generate_lockfile.rs b/tests/testsuite/generate_lockfile.rs index aa4aed1980a..2c0b65a0db1 100644 --- a/tests/testsuite/generate_lockfile.rs +++ b/tests/testsuite/generate_lockfile.rs @@ -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();