diff --git a/Cargo.lock b/Cargo.lock index bb6785bb78..6fae5ce0ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -260,11 +260,14 @@ dependencies = [ "cargo_metadata", "clap", "clap-cargo", + "clap-verbosity-flag", "concolor-control", "dunce", + "env_logger", "hex", "home", "indexmap", + "log", "pathdiff", "semver", "serde", @@ -403,6 +406,16 @@ dependencies = [ "clap", ] +[[package]] +name = "clap-verbosity-flag" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2678fade3b77aa3a8ff3aae87e9c008d3fb00473a41c71fbf74e91c8c7b37e84" +dependencies = [ + "clap", + "log", +] + [[package]] name = "clap_builder" version = "4.5.27" @@ -712,6 +725,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -1301,6 +1337,30 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +[[package]] +name = "jiff" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "jobserver" version = "0.1.32" @@ -1391,9 +1451,9 @@ checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "log" -version = "0.4.25" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" @@ -1584,6 +1644,21 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2187,9 +2262,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.96" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index bd7962df3e..c4eaeb4491 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -78,6 +78,9 @@ toml_edit = "0.22.22" indexmap = "2" url = "2.5.4" pathdiff = "0.2" +env_logger = "0.11.8" +clap-verbosity-flag = "3.0.2" +log = "0.4.27" [dependencies.semver] features = ["serde"] diff --git a/README.md b/README.md index da8558da7a..275cb3ce87 100644 --- a/README.md +++ b/README.md @@ -74,12 +74,13 @@ Upgrade dependency version requirements in Cargo.toml manifest files Usage: cargo upgrade [OPTIONS] Options: - --dry-run Print changes to be made without making them + -n, --dry-run Print changes to be made without making them --manifest-path Path to the manifest to upgrade --rust-version Override `rust-version` --ignore-rust-version Ignore `rust-version` specification in packages --locked Require `Cargo.toml` to be up to date - -v, --verbose... Use verbose output + -v, --verbose... Increase logging verbosity + -q, --quiet... Decrease logging verbosity -Z Unstable (nightly-only) flags -h, --help Print help -V, --version Print version @@ -132,10 +133,12 @@ Options: -p, --package Package id of the crate to change the version of --all [deprecated in favor of `--workspace`] --workspace Modify all packages in the workspace - --dry-run Print changes to be made without making them + -n, --dry-run Print changes to be made without making them --exclude Crates to exclude and not modify --offline Run without accessing the network --locked Require `Cargo.toml` to be up to date + -v, --verbose... Increase logging verbosity + -q, --quiet... Decrease logging verbosity -Z Unstable (nightly-only) flags -h, --help Print help -V, --version Print version diff --git a/src/bin/set-version/set_version.rs b/src/bin/set-version/set_version.rs index afdd92bf2c..66e74f0976 100644 --- a/src/bin/set-version/set_version.rs +++ b/src/bin/set-version/set_version.rs @@ -53,7 +53,7 @@ pub struct VersionArgs { workspace: bool, /// Print changes to be made without making them. - #[arg(long)] + #[arg(long, short = 'n')] dry_run: bool, /// Crates to exclude and not modify. @@ -68,6 +68,9 @@ pub struct VersionArgs { #[arg(long)] locked: bool, + #[command(flatten)] + verbose: clap_verbosity_flag::Verbosity, + /// Unstable (nightly-only) flags #[arg(short = 'Z', value_name = "FLAG", global = true, value_enum)] unstable_features: Vec, @@ -85,6 +88,10 @@ enum UnstableOptions {} /// Main processing function. Allows us to return a `Result` so that `main` can print pretty error /// messages. fn exec(args: VersionArgs) -> CargoResult<()> { + env_logger::Builder::from_env("CARGO_LOG") + .filter_level(args.verbose.log_level_filter()) + .init(); + let VersionArgs { target, bump, @@ -97,6 +104,7 @@ fn exec(args: VersionArgs) -> CargoResult<()> { exclude, locked, offline, + verbose: _, unstable_features: _, } = args; diff --git a/src/bin/upgrade/upgrade.rs b/src/bin/upgrade/upgrade.rs index 04688e754a..29d3960ed3 100644 --- a/src/bin/upgrade/upgrade.rs +++ b/src/bin/upgrade/upgrade.rs @@ -19,7 +19,7 @@ use termcolor::{Color, ColorSpec}; #[command(version)] pub struct UpgradeArgs { /// Print changes to be made without making them. - #[arg(long)] + #[arg(long, short = 'n')] dry_run: bool, /// Path to the manifest to upgrade @@ -38,9 +38,8 @@ pub struct UpgradeArgs { #[arg(long)] locked: bool, - /// Use verbose output - #[arg(short, long, action = clap::ArgAction::Count)] - verbose: u8, + #[command(flatten)] + verbose: clap_verbosity_flag::Verbosity, /// Unstable (nightly-only) flags #[arg(short = 'Z', value_name = "FLAG", global = true, value_enum)] @@ -117,8 +116,19 @@ impl UpgradeArgs { exec(self) } + fn verbose_num(&self) -> i8 { + match self.verbose.filter() { + clap_verbosity_flag::VerbosityFilter::Off => -1, + clap_verbosity_flag::VerbosityFilter::Error => 0, + clap_verbosity_flag::VerbosityFilter::Warn => 1, + clap_verbosity_flag::VerbosityFilter::Info => 2, + clap_verbosity_flag::VerbosityFilter::Debug => 3, + clap_verbosity_flag::VerbosityFilter::Trace => 4, + } + } + fn is_verbose(&self) -> bool { - 0 < self.verbose + 0 < self.verbose_num() } fn verbose(&self, mut callback: F) -> CargoResult<()> @@ -156,6 +166,10 @@ enum UnstableOptions {} /// Main processing function. Allows us to return a `Result` so that `main` can print pretty error /// messages. fn exec(args: UpgradeArgs) -> CargoResult<()> { + env_logger::Builder::from_env("CARGO_LOG") + .filter_level(args.verbose.log_level_filter()) + .init(); + let offline = false; let mut index = IndexCache::new(CertsSource::Native); @@ -437,7 +451,7 @@ fn exec(args: UpgradeArgs) -> CargoResult<()> { if !table.is_empty() { let (interesting, uninteresting) = table .into_iter() - .partition::, _>(|d| d.show_for(args.verbose)); + .partition::, _>(|d| d.show_for(args.verbose_num())); print_upgrade(interesting)?; uninteresting_crates.extend(uninteresting); } @@ -796,7 +810,7 @@ impl Dep { spec } - fn show_for(&self, verbosity: u8) -> bool { + fn show_for(&self, verbosity: i8) -> bool { if 2 <= verbosity { return true; } diff --git a/src/index.rs b/src/index.rs index 1aabe2bfab..b65b570332 100644 --- a/src/index.rs +++ b/src/index.rs @@ -186,6 +186,7 @@ struct RemoteIndex { impl RemoteIndex { fn open(url: &Url, certs_source: CertsSource) -> CargoResult { + log::trace!("opening index entry for {url}"); let url = url.to_string(); let url = tame_index::IndexUrl::NonCratesIo(std::borrow::Cow::Owned(url)); let index = tame_index::SparseIndex::new(tame_index::IndexLocation::new(url))?; @@ -212,6 +213,7 @@ impl RemoteIndex { } fn krate(&mut self, name: &str) -> CargoResult> { + log::trace!("krate {name}"); let etag = self .etags .iter()