From c82a74c73f0f88cdef079f60075f1534f9c29280 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Wed, 7 Aug 2024 23:24:48 +1000 Subject: [PATCH] feat: Merge --disable-strategies with ones in cargo manifest Signed-off-by: Jiahao XU --- crates/bin/src/args.rs | 19 ++++++------- .../binstalk-types/src/cargo_toml_binstall.rs | 28 ++++++++++++++++--- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/crates/bin/src/args.rs b/crates/bin/src/args.rs index 000abd5f..a29b95b9 100644 --- a/crates/bin/src/args.rs +++ b/crates/bin/src/args.rs @@ -1,7 +1,7 @@ use std::{ env, ffi::OsString, - fmt, + fmt, mem, num::{NonZeroU16, NonZeroU64, ParseIntError}, path::PathBuf, str::FromStr, @@ -570,7 +570,7 @@ You cannot use --{option} and specify multiple packages at the same time. Do one } } - let has_strategies_override = !opts.strategies.is_empty(); + let ignore_disabled_strategies = !opts.strategies.is_empty(); // Default strategies if empty if opts.strategies.is_empty() { @@ -626,15 +626,14 @@ You cannot use --{option} and specify multiple packages at the same time. Do one pkg_url: opts.pkg_url.take(), pkg_fmt: opts.pkg_fmt.take(), bin_dir: opts.bin_dir.take(), - disabled_strategies: (!opts.disable_strategies.is_empty() || has_strategies_override).then( - || { - opts.disable_strategies - .iter() - .map(|strategy| strategy.0) - .collect::>() - .into_boxed_slice() - }, + disabled_strategies: Some( + mem::take(&mut opts.disable_strategies) + .into_iter() + .map(|strategy| strategy.0) + .collect::>() + .into_boxed_slice(), ), + ignore_disabled_strategies, signing: None, }; diff --git a/crates/binstalk-types/src/cargo_toml_binstall.rs b/crates/binstalk-types/src/cargo_toml_binstall.rs index e1ab03c6..74330e9e 100644 --- a/crates/binstalk-types/src/cargo_toml_binstall.rs +++ b/crates/binstalk-types/src/cargo_toml_binstall.rs @@ -101,6 +101,11 @@ impl PkgMeta { where It: IntoIterator + Clone, { + let ignore_disabled_strategies = pkg_overrides + .clone() + .into_iter() + .any(|pkg_override| pkg_override.ignore_disabled_strategies); + Self { pkg_url: pkg_overrides .clone() @@ -126,10 +131,22 @@ impl PkgMeta { .find_map(|pkg_override| pkg_override.signing.clone()) .or_else(|| self.signing.clone()), - disabled_strategies: pkg_overrides - .into_iter() - .find_map(|pkg_override| pkg_override.disabled_strategies.clone()) - .or_else(|| self.disabled_strategies.clone()), + disabled_strategies: if ignore_disabled_strategies { + None + } else { + let mut disabled_strategies = pkg_overrides + .into_iter() + .filter_map(|pkg_override| pkg_override.disabled_strategies.as_deref()) + .flatten() + .chain(self.disabled_strategies.as_deref().into_iter().flatten()) + .copied() + .collect::>(); + + disabled_strategies.sort_unstable(); + disabled_strategies.dedup(); + + Some(disabled_strategies.into_boxed_slice()) + }, overrides: Default::default(), } @@ -156,6 +173,9 @@ pub struct PkgOverride { /// Package signing configuration pub signing: Option, + + #[serde(skip)] + pub ignore_disabled_strategies: bool, } #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]