feat: Merge --disable-strategies with ones in cargo manifest

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2024-08-07 23:24:48 +10:00
parent 90d47f76b1
commit c82a74c73f
No known key found for this signature in database
GPG key ID: 76D1E687CA3C4928
2 changed files with 33 additions and 14 deletions

View file

@ -1,7 +1,7 @@
use std::{ use std::{
env, env,
ffi::OsString, ffi::OsString,
fmt, fmt, mem,
num::{NonZeroU16, NonZeroU64, ParseIntError}, num::{NonZeroU16, NonZeroU64, ParseIntError},
path::PathBuf, path::PathBuf,
str::FromStr, 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 // Default strategies if empty
if opts.strategies.is_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_url: opts.pkg_url.take(),
pkg_fmt: opts.pkg_fmt.take(), pkg_fmt: opts.pkg_fmt.take(),
bin_dir: opts.bin_dir.take(), bin_dir: opts.bin_dir.take(),
disabled_strategies: (!opts.disable_strategies.is_empty() || has_strategies_override).then( disabled_strategies: Some(
|| { mem::take(&mut opts.disable_strategies)
opts.disable_strategies .into_iter()
.iter()
.map(|strategy| strategy.0) .map(|strategy| strategy.0)
.collect::<Vec<_>>() .collect::<Vec<_>>()
.into_boxed_slice() .into_boxed_slice(),
},
), ),
ignore_disabled_strategies,
signing: None, signing: None,
}; };

View file

@ -101,6 +101,11 @@ impl PkgMeta {
where where
It: IntoIterator<Item = &'a PkgOverride> + Clone, It: IntoIterator<Item = &'a PkgOverride> + Clone,
{ {
let ignore_disabled_strategies = pkg_overrides
.clone()
.into_iter()
.any(|pkg_override| pkg_override.ignore_disabled_strategies);
Self { Self {
pkg_url: pkg_overrides pkg_url: pkg_overrides
.clone() .clone()
@ -126,10 +131,22 @@ impl PkgMeta {
.find_map(|pkg_override| pkg_override.signing.clone()) .find_map(|pkg_override| pkg_override.signing.clone())
.or_else(|| self.signing.clone()), .or_else(|| self.signing.clone()),
disabled_strategies: pkg_overrides disabled_strategies: if ignore_disabled_strategies {
None
} else {
let mut disabled_strategies = pkg_overrides
.into_iter() .into_iter()
.find_map(|pkg_override| pkg_override.disabled_strategies.clone()) .filter_map(|pkg_override| pkg_override.disabled_strategies.as_deref())
.or_else(|| self.disabled_strategies.clone()), .flatten()
.chain(self.disabled_strategies.as_deref().into_iter().flatten())
.copied()
.collect::<Vec<Strategy>>();
disabled_strategies.sort_unstable();
disabled_strategies.dedup();
Some(disabled_strategies.into_boxed_slice())
},
overrides: Default::default(), overrides: Default::default(),
} }
@ -156,6 +173,9 @@ pub struct PkgOverride {
/// Package signing configuration /// Package signing configuration
pub signing: Option<PkgSigning>, pub signing: Option<PkgSigning>,
#[serde(skip)]
pub ignore_disabled_strategies: bool,
} }
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]