diff --git a/src/main.rs b/src/main.rs index 94e2f9b4..d2072c85 100644 --- a/src/main.rs +++ b/src/main.rs @@ -176,9 +176,7 @@ depth is changed, regardless of any options set.", Arg::new("keep") .help("Strip all metadata except in the comma-separated list") .long("keep") - .value_name("list") - .conflicts_with("strip") - .conflicts_with("strip-safe"), + .value_name("list"), ) .arg( Arg::new("alpha") @@ -613,14 +611,6 @@ fn parse_opts_into_struct( }; } - if let Some(keep) = matches.get_one::("keep") { - let names = keep - .split(',') - .map(parse_chunk_name) - .collect::>()?; - opts.strip = StripChunks::Keep(names) - } - if let Some(strip) = matches.get_one::("strip") { if strip == "safe" { opts.strip = StripChunks::Safe; @@ -647,10 +637,23 @@ fn parse_opts_into_struct( .collect::>()?; opts.strip = StripChunks::Strip(names); } + } else if matches.get_flag("strip-safe") { + opts.strip = StripChunks::Safe; } - if matches.get_flag("strip-safe") { - opts.strip = StripChunks::Safe; + if let Some(keep) = matches.get_one::("keep") { + if matches!(opts.strip, StripChunks::Strip(_)) { + return Err("--strip and --keep cannot be used together".to_owned()); + } + let mut names: IndexSet<_> = keep + .split(',') + .map(parse_chunk_name) + .collect::>()?; + if opts.strip == StripChunks::Safe { + // Add the keep safe chunks to the list + names.extend(StripChunks::KEEP_SAFE.iter().cloned()); + } + opts.strip = StripChunks::Keep(names); } if matches.get_flag("zopfli") {