From b1bfa7110bedd837a9921def71bc4b72cda0e007 Mon Sep 17 00:00:00 2001 From: "Andrew Phillips (aider)" Date: Mon, 12 May 2025 19:10:12 -0300 Subject: [PATCH] feat: Add --digest CLI option to select digest type --- src/main.rs | 8 ++++++++ src/modes/save.rs | 10 +++++++++- src/tests.rs | 31 +++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index a35ca3f..51fb623 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,9 +105,17 @@ struct ItemArgs { #[arg(help("Set metadata for the item using the format KEY=[VALUE], the metadata will be removed if VALUE is not provided"))] meta: Vec, + #[arg(help_heading("Item Options"), short, long, env("KEEP_DIGEST"))] + #[arg(help("Digest algorithm to use when saving items"))] + digest: Option, + #[arg(help_heading("Item Options"), short, long, env("KEEP_COMPRESSION"))] #[arg(help("Compression algorithm to use when saving items"))] compression: Option, + + #[arg(help_heading("Item Options"), short, long, env("KEEP_DIGEST"))] + #[arg(help("Digest algorithm to use when saving items"))] + digest: Option, } #[derive(Parser, Debug)] diff --git a/src/modes/save.rs b/src/modes/save.rs index 0befc93..1e4bf7c 100644 --- a/src/modes/save.rs +++ b/src/modes/save.rs @@ -35,6 +35,13 @@ pub fn mode_save( tags.push("none".to_string()); } + // Get the digest type to use + let digest_name = args + .item + .digest + .clone() + .unwrap_or(DigestType::Sha256.to_string()); + let compression_name = args .item .compression @@ -55,7 +62,8 @@ pub fn mode_save( debug!("MAIN: Compression type: {}", compression_type); // Create a new digest engine - let digest_type = DigestType::Sha256; + let digest_type = DigestType::from_str(&digest_name) + .unwrap_or(DigestType::Sha256); let mut digest_engine = get_engine(digest_type); let mut item = db::Item { diff --git a/src/tests.rs b/src/tests.rs index 794afcb..1ba732d 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -57,6 +57,37 @@ mod tests { cmd, output.status ); + + // Test with digest option + let cmd = format!("echo {} | {} --digest sha256 -c none none", INPUT_A, env); + println!("RUNNING: {}", cmd); + let output = run_sh(cmd.as_str()); + assert!( + output.status.success(), + "Command failed: {} {}", + cmd, + output.status + ); + + let cmd = format!("echo {} | {} --digest md5 -c none none", INPUT_A, env); + println!("RUNNING: {}", cmd); + let output = run_sh(cmd.as_str()); + assert!( + output.status.success(), + "Command failed: {} {}", + cmd, + output.status + ); + + let cmd = format!("echo {} | {} --digest program -p md5sum -c none none", INPUT_A, env); + println!("RUNNING: {}", cmd); + let output = run_sh(cmd.as_str()); + assert!( + output.status.success(), + "Command failed: {} {}", + cmd, + output.status + ); } // Helper function to check if a file exists in the data directory