From e98ac32abcc0ba48c2d69389646f7bb1bcea2696 Mon Sep 17 00:00:00 2001 From: ychampion Date: Tue, 14 Jul 2026 20:35:20 +0000 Subject: [PATCH] fix(upgrade): show the next effective verbosity Constraint: Preserve the existing three-level dependency filtering and default hint. Rejected: Change verbosity semantics | The maintainer confirmed the filtering behavior is intentional. Confidence: high Scope-risk: narrow Directive: Keep hints aligned with the next display level when verbosity behavior changes. Tested: focused red-to-green UI snapshots; full locked all-feature suite; rustfmt; strict all-target/all-feature Clippy. Not-tested: None. --- CHANGELOG.md | 4 ++ src/bin/upgrade/upgrade.rs | 7 ++- tests/cargo-upgrade/main.rs | 1 + .../upgrade_verbose_hint/in/Cargo.toml | 47 +++++++++++++++ .../cargo-upgrade/upgrade_verbose_hint/mod.rs | 28 +++++++++ .../upgrade_verbose_hint/out/Cargo.toml | 47 +++++++++++++++ .../upgrade_verbose_hint/stderr.term.svg | 33 +++++++++++ .../upgrade_verbose_hint/stdout.term.svg | 57 +++++++++++++++++++ 8 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 tests/cargo-upgrade/upgrade_verbose_hint/in/Cargo.toml create mode 100644 tests/cargo-upgrade/upgrade_verbose_hint/mod.rs create mode 100644 tests/cargo-upgrade/upgrade_verbose_hint/out/Cargo.toml create mode 100644 tests/cargo-upgrade/upgrade_verbose_hint/stderr.term.svg create mode 100644 tests/cargo-upgrade/upgrade_verbose_hint/stdout.term.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index db7438ab64..a257ed9848 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ The format is based on [Keep a Changelog]. ## Unreleased - ReleaseDate +### Fixes + +- *(upgrade)* Point single-`--verbose` users to `--verbose --verbose` when more dependencies are hidden + ## 0.13.12 - 2026-07-14 ### Fixes diff --git a/src/bin/upgrade/upgrade.rs b/src/bin/upgrade/upgrade.rs index 1afdfcf9f7..02357791d2 100644 --- a/src/bin/upgrade/upgrade.rs +++ b/src/bin/upgrade/upgrade.rs @@ -625,7 +625,12 @@ fn exec(args: UpgradeArgs) -> CargoResult<()> { .or_insert_with(BTreeSet::new) .insert(dep.name); } - let mut note = "Re-run with `--verbose` to show more dependencies".to_owned(); + let verbose_flags = if args.is_verbose() { + "`--verbose --verbose`" + } else { + "`--verbose`" + }; + let mut note = format!("Re-run with {verbose_flags} to show more dependencies"); for (reason, deps) in categorize { use std::fmt::Write; write!(&mut note, "\n {reason}: ")?; diff --git a/tests/cargo-upgrade/main.rs b/tests/cargo-upgrade/main.rs index 1f982effbb..5ba27cd23d 100644 --- a/tests/cargo-upgrade/main.rs +++ b/tests/cargo-upgrade/main.rs @@ -33,6 +33,7 @@ mod upgrade_all; mod upgrade_everything; mod upgrade_renamed; mod upgrade_verbose; +mod upgrade_verbose_hint; mod upgrade_workspace; mod virtual_manifest; mod workspace_inheritance; diff --git a/tests/cargo-upgrade/upgrade_verbose_hint/in/Cargo.toml b/tests/cargo-upgrade/upgrade_verbose_hint/in/Cargo.toml new file mode 100644 index 0000000000..8e2ccd8138 --- /dev/null +++ b/tests/cargo-upgrade/upgrade_verbose_hint/in/Cargo.toml @@ -0,0 +1,47 @@ +[package] +name = "None" +version = "0.1.0" + +[lib] +path = "dummy.rs" + +[dependencies] +docopt = "0.4" +pad = "0.1" +serde_json = "20.0" +syn = { version = "0.1.1", default-features = false } +tar = { version = "0.4", default-features = false } +ftp = "20.0.0" +te = { package = "toml_edit", version = "0.1.1" } + +[dependencies.semver] +version = "0.2" + +[dependencies.rn] +package = "renamed" +version = "0.1" + +[dev-dependencies] +assert_cli = "0.2.0" +tempdir = "0.1" + +[build-dependencies] +serde = { version = "1.0", path = "../serde" } + +[target.'cfg(unix)'.dependencies] +openssl = "0.4" + +[target."windows.json"] +# let's make it an inline table +dependencies = { rget = "0.4.0" } + +[target.'cfg(target_arch = "x86_64")'.dev-dependencies] +geo = { version = "0.2.0", default-features = false } + +[target.foo.build-dependencies] +ftp = "0.2.0" + +[features] +default = [] +test-external-apis = [] +unstable = [] diff --git a/tests/cargo-upgrade/upgrade_verbose_hint/mod.rs b/tests/cargo-upgrade/upgrade_verbose_hint/mod.rs new file mode 100644 index 0000000000..314bbf1fb6 --- /dev/null +++ b/tests/cargo-upgrade/upgrade_verbose_hint/mod.rs @@ -0,0 +1,28 @@ +use cargo_test_support::Project; +use cargo_test_support::compare::assert_ui; +use cargo_test_support::file; +use cargo_test_support::prelude::*; + +use crate::CargoCommand; +use cargo_test_support::current_dir; + +#[cargo_test] +fn case() { + cargo_test_support::registry::init(); + crate::add_everything_registry_packages(false); + crate::add_git_registry_packages(); + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + + snapbox::cmd::Command::cargo_ui() + .arg("upgrade") + .args(["--pinned", "--incompatible", "--verbose"]) + .current_dir(cwd) + .assert() + .success() + .stdout_eq(file!["stdout.term.svg"]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/cargo-upgrade/upgrade_verbose_hint/out/Cargo.toml b/tests/cargo-upgrade/upgrade_verbose_hint/out/Cargo.toml new file mode 100644 index 0000000000..b459b857f3 --- /dev/null +++ b/tests/cargo-upgrade/upgrade_verbose_hint/out/Cargo.toml @@ -0,0 +1,47 @@ +[package] +name = "None" +version = "0.1.0" + +[lib] +path = "dummy.rs" + +[dependencies] +docopt = "99999.0" +pad = "99999.0" +serde_json = "99999.0" +syn = { version = "99999.0.0", default-features = false } +tar = { version = "99999.0", default-features = false } +ftp = "99999.0.0" +te = { package = "toml_edit", version = "99999.0.0" } + +[dependencies.semver] +version = "99999.0" + +[dependencies.rn] +package = "renamed" +version = "99999.0" + +[dev-dependencies] +assert_cli = "99999.0.0" +tempdir = "99999.0" + +[build-dependencies] +serde = { version = "1.0", path = "../serde" } + +[target.'cfg(unix)'.dependencies] +openssl = "99999.0" + +[target."windows.json"] +# let's make it an inline table +dependencies = { rget = "99999.0.0" } + +[target.'cfg(target_arch = "x86_64")'.dev-dependencies] +geo = { version = "99999.0.0", default-features = false } + +[target.foo.build-dependencies] +ftp = "99999.0.0" + +[features] +default = [] +test-external-apis = [] +unstable = [] diff --git a/tests/cargo-upgrade/upgrade_verbose_hint/stderr.term.svg b/tests/cargo-upgrade/upgrade_verbose_hint/stderr.term.svg new file mode 100644 index 0000000000..e15028903e --- /dev/null +++ b/tests/cargo-upgrade/upgrade_verbose_hint/stderr.term.svg @@ -0,0 +1,33 @@ + + + + + + + Checking None's dependencies + + Upgrading recursive dependencies + + Locking 0 packages to latest compatible versions + + note: Re-run with `--verbose --verbose` to show more dependencies + + latest: serde + + + + + + diff --git a/tests/cargo-upgrade/upgrade_verbose_hint/stdout.term.svg b/tests/cargo-upgrade/upgrade_verbose_hint/stdout.term.svg new file mode 100644 index 0000000000..d12dd233aa --- /dev/null +++ b/tests/cargo-upgrade/upgrade_verbose_hint/stdout.term.svg @@ -0,0 +1,57 @@ + + + + + + + name old req compatible latest new req + + ==== ======= ========== ====== ======= + + docopt 0.4 0.4.1 99999.0.0 99999.0 + + pad 0.1 0.1.1 99999.0.0 99999.0 + + serde_json 20.0 20.0.0 99999.0.0 99999.0 + + syn 0.1.1 0.1.1 99999.0.0 99999.0.0 + + tar 0.4 0.4.1 99999.0.0 99999.0 + + ftp 20.0.0 20.0.0 99999.0.0 99999.0.0 + + toml_edit (te) 0.1.1 0.1.1 99999.0.0 99999.0.0 + + semver 0.2 0.2.3 99999.0.0 99999.0 + + renamed (rn) 0.1 0.1.1 99999.0.0 99999.0 + + assert_cli 0.2.0 0.2.3 99999.0.0 99999.0.0 + + tempdir 0.1 0.1.1 99999.0.0 99999.0 + + openssl 0.4 0.4.1 99999.0.0 99999.0 + + rget 0.4.0 0.4.1 99999.0.0 99999.0.0 + + geo 0.2.0 0.2.3 99999.0.0 99999.0.0 + + ftp 0.2.0 0.2.3 99999.0.0 99999.0.0 + + + + + +