diff --git a/crates/cli/src/commands/rm.rs b/crates/cli/src/commands/rm.rs index 8798208..5b719f1 100644 --- a/crates/cli/src/commands/rm.rs +++ b/crates/cli/src/commands/rm.rs @@ -307,6 +307,28 @@ async fn delete_recursive( .collect()); } + if args.purge { + let mut deleted = Vec::new(); + let mut failed = Vec::new(); + let mut first_error_code = None; + + for key in keys_to_delete { + match delete_single(client, alias_name, bucket, &key, args, formatter).await { + Ok(paths) => deleted.extend(paths), + Err((code, paths)) => { + first_error_code.get_or_insert(code); + failed.extend(paths); + } + } + } + + return if failed.is_empty() { + Ok(deleted) + } else { + Err((first_error_code.unwrap_or(ExitCode::GeneralError), failed)) + }; + } + // Delete in batches (S3 allows up to 1000 per request) let mut deleted = Vec::new(); let mut failed = Vec::new(); diff --git a/crates/cli/tests/integration.rs b/crates/cli/tests/integration.rs index a456ccd..c0cdb6a 100644 --- a/crates/cli/tests/integration.rs +++ b/crates/cli/tests/integration.rs @@ -439,7 +439,7 @@ mod bucket_operations { assert_eq!(rules.len(), 1, "Expected one CORS rule from stdin input"); assert_eq!(rules[0]["id"].as_str(), Some("stdin-rule")); assert_eq!( - rules[0]["allowed_methods"].as_array().map(|methods| methods + rules[0]["allowedMethods"].as_array().map(|methods| methods .iter() .filter_map(|method| method.as_str()) .collect::>()),