diff --git a/Cargo.lock b/Cargo.lock index f03ea259..ec4d8477 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -134,6 +134,7 @@ dependencies = [ "env_logger", "flate2", "log", + "regex", "reqwest", "semver", "serde", @@ -1186,9 +1187,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", diff --git a/Cargo.toml b/Cargo.toml index b081f017..e3df5211 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ xz2 = "0.1.6" zip = "0.5.13" async-trait = "0.1.52" url = "2.2.2" +regex = "1.5.5" [dev-dependencies] env_logger = "0.9.0" diff --git a/src/bins.rs b/src/bins.rs index ce51dffe..157313c8 100644 --- a/src/bins.rs +++ b/src/bins.rs @@ -1,4 +1,4 @@ -use std::path::{PathBuf, Path}; +use std::path::{Path, PathBuf}; use cargo_toml::Product; use log::debug; @@ -118,9 +118,13 @@ impl BinFile { fn link_dest(&self) -> &Path { #[cfg(target_family = "unix")] - { Path::new(self.dest.file_name().unwrap()) } + { + Path::new(self.dest.file_name().unwrap()) + } #[cfg(target_family = "windows")] - { &self.dest } + { + &self.dest + } } } diff --git a/src/main.rs b/src/main.rs index 89681ccc..b04c9973 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,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 plain_version_rx = regex::Regex::new(r"^\d+[.]\d+[.]\d+(-\w+([.]\d+)?)?$").unwrap(); + if plain_version_rx.is_match(&opts.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