From a96ed2de96e34929d6c1ac7f9fc690e16dee1643 Mon Sep 17 00:00:00 2001 From: Wilfred Hughes Date: Wed, 22 Oct 2025 00:49:42 +0100 Subject: [PATCH] Improve binary change descriptions --- src/main.rs | 30 +++++++++++++++++++++++++----- tests/cli.rs | 4 ++-- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index 14f97d745..32abfa12b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -974,11 +974,31 @@ fn print_diff_result(display_options: &DisplayOptions, summary: &DiffResult) { match summary.has_byte_changes { Some((lhs_len, rhs_len)) => { let format_options = FormatSizeOptions::from(BINARY).decimal_places(1); - println!( - "Binary contents changed (old: {}, new: {}).\n", - &format_size(lhs_len, format_options), - &format_size(rhs_len, format_options), - ) + + if lhs_len == 0 { + // Strictly speaking this is wrong: + // previously we may have had an empty but + // existent file. In that case, it's a + // file modification instead of a file + // creation. + // + // TODO: Fix this pedantic case. + println!( + "Binary file added ({}).\n", + &format_size(rhs_len, format_options), + ) + } else if rhs_len == 0 { + println!( + "Binary file removed ({}).\n", + &format_size(lhs_len, format_options), + ) + } else { + println!( + "Binary file modified (old: {}, new: {}).\n", + &format_size(lhs_len, format_options), + &format_size(rhs_len, format_options), + ) + } } None => println!("No changes.\n"), } diff --git a/tests/cli.rs b/tests/cli.rs index ebbe3aa0f..90c3025df 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -57,7 +57,7 @@ fn binary_changed() { .arg("img/logo.png") .arg("/dev/null"); - let predicate_fn = predicate::str::contains("Binary contents changed"); + let predicate_fn = predicate::str::contains("Binary file removed"); cmd.assert().stdout(predicate_fn); } @@ -68,7 +68,7 @@ fn binary_override() { cmd.arg("--override-binary=*.js") .arg("sample_files/simple_1.js") .arg("sample_files/simple_2.js"); - let predicate_fn = predicate::str::contains("Binary contents changed"); + let predicate_fn = predicate::str::contains("Binary file modified"); cmd.assert().stdout(predicate_fn); }