From ac74da4a27e090a6077b7f2487e792737aa5eda4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= <felix@passcod.name> Date: Wed, 1 Jun 2022 00:47:32 +1200 Subject: [PATCH 1/5] Clippy suggestions --- src/drivers.rs | 4 ++-- src/fetchers.rs | 6 ++++-- src/fetchers/gh_crate_meta.rs | 2 +- src/helpers.rs | 4 ++-- src/lib.rs | 20 +++++--------------- src/main.rs | 6 +++--- 6 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/drivers.rs b/src/drivers.rs index 7b39bd10..1ca2ed3f 100644 --- a/src/drivers.rs +++ b/src/drivers.rs @@ -22,7 +22,7 @@ fn find_version<'a, V: Iterator<Item = &'a String>>( let filtered: BTreeSet<_> = version_iter .filter_map(|v| { // Remove leading `v` for git tags - let ver_str = match v.strip_prefix("s") { + let ver_str = match v.strip_prefix('s') { Some(v) => v, None => v, }; @@ -47,7 +47,7 @@ fn find_version<'a, V: Iterator<Item = &'a String>>( .iter() .max() .cloned() - .ok_or_else(|| BinstallError::VersionMismatch { req: version_req }) + .ok_or(BinstallError::VersionMismatch { req: version_req }) } /// Fetch a crate by name and version from crates.io diff --git a/src/fetchers.rs b/src/fetchers.rs index 44fdf57e..b7b25795 100644 --- a/src/fetchers.rs +++ b/src/fetchers.rs @@ -54,14 +54,16 @@ impl MultiFetcher { pub async fn first_available(&self) -> Option<&dyn Fetcher> { for fetcher in &self.fetchers { - if fetcher.check().await.unwrap_or_else(|err| { + let available = fetcher.check().await.unwrap_or_else(|err| { debug!( "Error while checking fetcher {}: {}", fetcher.source_name(), err ); false - }) { + }); + + if available { return Some(&**fetcher); } } diff --git a/src/fetchers/gh_crate_meta.rs b/src/fetchers/gh_crate_meta.rs index c8b4e60d..e9a7634a 100644 --- a/src/fetchers/gh_crate_meta.rs +++ b/src/fetchers/gh_crate_meta.rs @@ -16,7 +16,7 @@ impl GhCrateMeta { fn url(&self) -> Result<Url, BinstallError> { let ctx = Context::from_data(&self.data); debug!("Using context: {:?}", ctx); - Ok(ctx.render_url(&self.data.meta.pkg_url)?) + ctx.render_url(&self.data.meta.pkg_url) } } diff --git a/src/helpers.rs b/src/helpers.rs index c1ffcec0..6f160391 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -194,7 +194,7 @@ pub fn get_install_path<P: AsRef<Path>>(install_path: Option<P>) -> Option<PathB // Local executable dir if no cargo is found if let Some(d) = dirs::executable_dir() { debug!("Fallback to {}", d.display()); - return Some(d.into()); + return Some(d); } None @@ -226,7 +226,7 @@ pub trait Template: Serialize { let mut tt = TinyTemplate::new(); // Add template to instance - tt.add_template("path", &template)?; + tt.add_template("path", template)?; // Render output Ok(tt.render("path", self)?) diff --git a/src/lib.rs b/src/lib.rs index 1fa840b1..2a823625 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,14 +16,14 @@ pub mod bins; pub mod fetchers; /// Compiled target triple, used as default for binary fetching -pub const TARGET: &'static str = env!("TARGET"); +pub const TARGET: &str = env!("TARGET"); /// Default package path template (may be overridden in package Cargo.toml) -pub const DEFAULT_PKG_URL: &'static str = +pub const DEFAULT_PKG_URL: &str = "{ repo }/releases/download/v{ version }/{ name }-{ target }-v{ version }.{ archive-format }"; /// Default binary name template (may be overridden in package Cargo.toml) -pub const DEFAULT_BIN_DIR: &'static str = "{ name }-{ target }-v{ version }/{ bin }{ binary-ext }"; +pub const DEFAULT_BIN_DIR: &str = "{ name }-{ target }-v{ version }/{ bin }{ binary-ext }"; /// Binary format enumeration #[derive( @@ -113,7 +113,7 @@ impl PkgMeta { /// Target specific overrides for binary installation /// /// Exposed via `[package.metadata.TARGET]` in `Cargo.toml` -#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "kebab-case", default)] pub struct PkgOverride { /// URL template override for package downloads @@ -126,16 +126,6 @@ pub struct PkgOverride { pub bin_dir: Option<String>, } -impl Default for PkgOverride { - fn default() -> Self { - Self { - pkg_url: None, - pkg_fmt: None, - bin_dir: None, - } - } -} - #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] pub struct BinMeta { @@ -164,7 +154,7 @@ mod test { let manifest = load_manifest_path(&manifest_dir).expect("Error parsing metadata"); let package = manifest.package.unwrap(); - let meta = package.metadata.map(|m| m.binstall).flatten().unwrap(); + let meta = package.metadata.and_then(|m| m.binstall).unwrap(); assert_eq!(&package.name, "cargo-binstall"); diff --git a/src/main.rs b/src/main.rs index 000ae381..a9479a2d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -191,9 +191,8 @@ async fn entry() -> Result<()> { package .metadata .as_ref() - .map(|m| m.binstall.clone()) - .flatten() - .unwrap_or(PkgMeta::default()), + .and_then(|m| m.binstall.clone()) + .unwrap_or_default(), manifest.bin, ); @@ -254,6 +253,7 @@ async fn entry() -> Result<()> { } } +#[allow(clippy::too_many_arguments)] async fn install_from_package( binaries: Vec<Product>, fetcher: &dyn Fetcher, From f2905dd46e68f41675f3d7fe777d4b02588eab14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Saparelli?= <felix@passcod.name> Date: Wed, 1 Jun 2022 00:59:00 +1200 Subject: [PATCH 2/5] Update src/helpers.rs Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com> --- src/helpers.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/helpers.rs b/src/helpers.rs index 6f160391..a9795ffe 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -192,7 +192,13 @@ pub fn get_install_path<P: AsRef<Path>>(install_path: Option<P>) -> Option<PathB } // Local executable dir if no cargo is found - if let Some(d) = dirs::executable_dir() { + let dir = dirs::executable_dir(); + + if let Some(d) = &dir { + debug!("Fallback to {}", d.display()); + } + + dir debug!("Fallback to {}", d.display()); return Some(d); } From 7ce1ac4ee6ed5d0cf62371d3bef118e536eb13de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= <felix@passcod.name> Date: Wed, 1 Jun 2022 01:00:33 +1200 Subject: [PATCH 3/5] Fix syntax --- src/helpers.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/helpers.rs b/src/helpers.rs index a9795ffe..e0d85b99 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -193,17 +193,12 @@ pub fn get_install_path<P: AsRef<Path>>(install_path: Option<P>) -> Option<PathB // Local executable dir if no cargo is found let dir = dirs::executable_dir(); - + if let Some(d) = &dir { debug!("Fallback to {}", d.display()); } dir - debug!("Fallback to {}", d.display()); - return Some(d); - } - - None } pub fn confirm() -> Result<(), BinstallError> { From 23f05f39855430b7c775d116cbd472f25d332760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= <felix@passcod.name> Date: Wed, 1 Jun 2022 01:03:52 +1200 Subject: [PATCH 4/5] Clippy in tests --- src/fetchers/gh_crate_meta.rs | 45 ++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src/fetchers/gh_crate_meta.rs b/src/fetchers/gh_crate_meta.rs index e9a7634a..fdf655e7 100644 --- a/src/fetchers/gh_crate_meta.rs +++ b/src/fetchers/gh_crate_meta.rs @@ -157,8 +157,11 @@ mod test { #[test] fn no_repo_but_full_url() { - let mut meta = PkgMeta::default(); - meta.pkg_url = format!("https://example.com{}", meta.pkg_url); + let meta = PkgMeta { + pkg_url: format!("https://example.com{}", PkgMeta::default().pkg_url), + ..Default::default() + }; + let data = Data { name: "cargo-binstall".to_string(), target: "x86_64-unknown-linux-gnu".to_string(), @@ -176,8 +179,13 @@ mod test { #[test] fn different_url() { - let mut meta = PkgMeta::default(); - meta.pkg_url = "{ repo }/releases/download/v{ version }/sx128x-util-{ target }-v{ version }.{ archive-format }".to_string(); + let meta = PkgMeta { + pkg_url: + "{ repo }/releases/download/v{ version }/sx128x-util-{ target }-v{ version }.{ archive-format }" + .into(), + ..Default::default() + }; + let data = Data { name: "radio-sx128x".to_string(), target: "x86_64-unknown-linux-gnu".to_string(), @@ -195,8 +203,11 @@ mod test { #[test] fn deprecated_format() { - let mut meta = PkgMeta::default(); - meta.pkg_url = "{ repo }/releases/download/v{ version }/sx128x-util-{ target }-v{ version }.{ format }".to_string(); + let meta = PkgMeta { + pkg_url: "{ repo }/releases/download/v{ version }/sx128x-util-{ target }-v{ version }.{ format }".into(), + ..Default::default() + }; + let data = Data { name: "radio-sx128x".to_string(), target: "x86_64-unknown-linux-gnu".to_string(), @@ -214,11 +225,14 @@ mod test { #[test] fn different_ext() { - let mut meta = PkgMeta::default(); - meta.pkg_url = - "{ repo }/releases/download/v{ version }/{ name }-v{ version }-{ target }.tar.xz" - .to_string(); - meta.pkg_fmt = PkgFmt::Txz; + let meta = PkgMeta { + pkg_url: + "{ repo }/releases/download/v{ version }/{ name }-v{ version }-{ target }.tar.xz" + .into(), + pkg_fmt: PkgFmt::Txz, + ..Default::default() + }; + let data = Data { name: "cargo-watch".to_string(), target: "aarch64-apple-darwin".to_string(), @@ -236,9 +250,12 @@ mod test { #[test] fn no_archive() { - let mut meta = PkgMeta::default(); - meta.pkg_url = "{ repo }/releases/download/v{ version }/{ name }-v{ version }-{ target }{ binary-ext }".to_string(); - meta.pkg_fmt = PkgFmt::Bin; + let meta = PkgMeta { + pkg_url: "{ repo }/releases/download/v{ version }/{ name }-v{ version }-{ target }{ binary-ext }".into(), + pkg_fmt: PkgFmt::Bin, + ..Default::default() + }; + let data = Data { name: "cargo-watch".to_string(), target: "aarch64-pc-windows-msvc".to_string(), From e3754de7f72399dac0d187701ac0d2a42f850ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= <felix@passcod.name> Date: Wed, 1 Jun 2022 01:11:53 +1200 Subject: [PATCH 5/5] Formatting --- src/fetchers/gh_crate_meta.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fetchers/gh_crate_meta.rs b/src/fetchers/gh_crate_meta.rs index fdf655e7..f048bb87 100644 --- a/src/fetchers/gh_crate_meta.rs +++ b/src/fetchers/gh_crate_meta.rs @@ -30,7 +30,9 @@ impl super::Fetcher for GhCrateMeta { let url = self.url()?; if url.scheme() != "https" { - warn!("URL is not HTTPS! This may become a hard error in the future, tell the upstream!"); + warn!( + "URL is not HTTPS! This may become a hard error in the future, tell the upstream!" + ); } info!("Checking for package at: '{url}'");