Auto merge of #13764 - epage:install-lock, r=ehuss

feat(install): Including Locking message

### What does this PR try to resolve?

This extends #13561 to include `cargo install`, like #13759 did for `cargo update`.

As we switch to MSRV-aware resolver, this will help users work out why
MSRV-aware resolving isn't helping them.

This will also make it more obvious if we breaking things when
developing the MSRV-aware resolver.

### How should we test and review this PR?

### Additional information

This still leaves `cargo publish` and a couple other misc situations that I'm intentionally avoiding because
- They hit some weird cases that can confuse the user (e.g. causing `cargo install --locked` to show that 1 package is being added) and we can't distinguish these cases too well from where this is happening
- The value is lower
This commit is contained in:
bors 2024-04-17 14:59:32 +00:00
commit 3a9b59f213
5 changed files with 53 additions and 17 deletions

View File

@ -134,15 +134,27 @@ pub fn resolve_ws_with_opts<'gctx>(
force_all_targets: ForceAllTargets,
) -> CargoResult<WorkspaceResolve<'gctx>> {
let mut registry = PackageRegistry::new(ws.gctx())?;
let mut add_patches = true;
let resolve = if ws.ignore_lock() {
None
let (resolve, resolved_with_overrides) = if ws.ignore_lock() {
let add_patches = true;
let resolve = None;
let resolved_with_overrides = resolve_with_previous(
&mut registry,
ws,
cli_features,
has_dev_units,
resolve.as_ref(),
None,
specs,
add_patches,
)?;
ops::print_lockfile_changes(ws, None, &resolved_with_overrides, &mut registry)?;
(resolve, resolved_with_overrides)
} else if ws.require_optional_deps() {
// First, resolve the root_package's *listed* dependencies, as well as
// downloading and updating all remotes and such.
let resolve = resolve_with_registry(ws, &mut registry)?;
// No need to add patches again, `resolve_with_registry` has done it.
add_patches = false;
let add_patches = false;
// Second, resolve with precisely what we're doing. Filter out
// transitive dependencies if necessary, specify features, handle
@ -170,22 +182,35 @@ pub fn resolve_ws_with_opts<'gctx>(
}
}
Some(resolve)
let resolved_with_overrides = resolve_with_previous(
&mut registry,
ws,
cli_features,
has_dev_units,
Some(&resolve),
None,
specs,
add_patches,
)?;
(Some(resolve), resolved_with_overrides)
} else {
ops::load_pkg_lockfile(ws)?
let add_patches = true;
let resolve = ops::load_pkg_lockfile(ws)?;
let resolved_with_overrides = resolve_with_previous(
&mut registry,
ws,
cli_features,
has_dev_units,
resolve.as_ref(),
None,
specs,
add_patches,
)?;
// Skipping `print_lockfile_changes` as there are cases where this prints irrelevant
// information
(resolve, resolved_with_overrides)
};
let resolved_with_overrides = resolve_with_previous(
&mut registry,
ws,
cli_features,
has_dev_units,
resolve.as_ref(),
None,
specs,
add_patches,
)?;
let pkg_set = get_resolved_packages(&resolved_with_overrides, registry)?;
let member_ids = ws
@ -252,6 +277,10 @@ fn resolve_with_registry<'gctx>(
let print = if !ws.is_ephemeral() && ws.require_optional_deps() {
ops::write_pkg_lockfile(ws, &mut resolve)?
} else {
// This mostly represents
// - `cargo install --locked` and the only change is the package is no longer local but
// from the registry which is noise
// - publish of libraries
false
};
if print {

View File

@ -148,6 +148,7 @@ fn simple_install() {
.with_stderr(
"\
[INSTALLING] bar v0.1.0
[LOCKING] 2 packages to latest compatible versions
[COMPILING] foo v0.0.1
[COMPILING] bar v0.1.0
[FINISHED] `release` profile [optimized] target(s) in [..]s
@ -243,6 +244,7 @@ fn install_without_feature_dep() {
.with_stderr(
"\
[INSTALLING] bar v0.1.0
[LOCKING] 2 packages to latest compatible versions
[COMPILING] foo v0.0.1
[COMPILING] bar v0.1.0
[FINISHED] `release` profile [optimized] target(s) in [..]s

View File

@ -2410,6 +2410,8 @@ fn self_referential() {
[DOWNLOADING] crates ...
[DOWNLOADED] foo v0.0.2 (registry [..])
[INSTALLING] foo v0.0.2
[LOCKING] 2 packages to latest compatible versions
[ADDING] foo v0.0.1 (latest: v0.0.2)
[DOWNLOADING] crates ...
[DOWNLOADED] foo v0.0.1 (registry [..])
[COMPILING] foo v0.0.1
@ -2455,6 +2457,7 @@ fn ambiguous_registry_vs_local_package() {
"\
[INSTALLING] foo v0.1.0 ([..])
[UPDATING] `[..]` index
[LOCKING] 2 packages to latest compatible versions
[DOWNLOADING] crates ...
[DOWNLOADED] foo v0.0.1 (registry [..])
[COMPILING] foo v0.0.1

View File

@ -415,6 +415,7 @@ dependencies = [
"\
[UPDATING] `[..]` index
[INSTALLING] foo v0.1.0
[LOCKING] 2 packages to latest compatible versions
[DOWNLOADING] crates ...
[DOWNLOADED] bar v0.1.1 (registry `[..]`)
[COMPILING] bar v0.1.1

View File

@ -1129,6 +1129,7 @@ Consider enabling them by passing, e.g., `--features=\"bar/a\"`
.with_stderr(
"\
[INSTALLING] foo v0.0.1 ([..])
[LOCKING] 2 packages to latest compatible versions
[FINISHED] `release` profile [optimized] target(s) in [..]
[WARNING] none of the package's binaries are available for install using the selected features
bin \"foo\" requires the features: `bar/a`