From d68b0a209a9045b1b80dc585f5cd0e670a4b9c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Saparelli?= Date: Fri, 29 Apr 2022 09:33:54 +1200 Subject: [PATCH] Clarify --version usage and add a warning at runtime (#116) Fixes #113 --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- src/main.rs | 18 ++++++++++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f03ea259..ad2838b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1186,9 +1186,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" dependencies = [ "aho-corasick", "memchr", @@ -1356,9 +1356,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0486718e92ec9a68fbed73bb5ef687d71103b142595b406835649bebd33f72c7" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" dependencies = [ "serde", ] diff --git a/Cargo.toml b/Cargo.toml index b081f017..a6e21780 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ strum_macros = "0.23.1" strum = "0.23.0" dirs = "4.0.0" crates-index = "0.18.5" -semver = "1.0.5" +semver = "1.0.7" xz2 = "0.1.6" zip = "0.5.13" async-trait = "0.1.52" diff --git a/src/main.rs b/src/main.rs index 3a2db66b..d32a45be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; +use std::{path::PathBuf, str::FromStr}; use log::{debug, error, info, warn, LevelFilter}; use simplelog::{ColorChoice, ConfigBuilder, TermLogger, TerminalMode}; @@ -20,7 +20,8 @@ struct Options { #[structopt()] name: String, - /// Filter for package version to install + /// Filter for package version to install, in Cargo.toml format. + /// Use `=1.2.3` to install a specific version. #[structopt(long, default_value = "*")] version: String, @@ -104,6 +105,19 @@ async fn main() -> Result<(), anyhow::Error> { let manifest = load_manifest_path(manifest_path.join("Cargo.toml"))?; let package = manifest.package.unwrap(); + let is_plain_version = semver::Version::from_str(&opts.version).is_ok(); + if is_plain_version && package.version != opts.version { + warn!( + "You specified `--version {o}` but the package resolved that to '{p}', use `={o}` if you want an exact match", + o=opts.version, p=package.version + ); + + if !opts.no_confirm && !opts.dry_run && !confirm()? { + warn!("Installation cancelled"); + return Ok(()); + } + } + let (mut meta, binaries) = ( package .metadata