summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSondeyy <nils.boettcher@posteo.de>2023-08-05 20:05:09 +0200
committerGitHub <noreply@github.com>2023-08-05 14:05:09 -0400
commite0eef7deccc7ca1c56d7c30894985c00898ef8a3 (patch)
tree39f8d6f6e61b94e3632597c8a77b816329c74cf8
parentb0aed26ed762b1d0a21179263b5cc5bc4f1f25a3 (diff)
Improve binary file added output (#1502)
* added binary file cases tests * add binary file cases handling * remove unnecessary return and comma
-rw-r--r--src/handlers/diff_header_misc.rs29
-rw-r--r--src/tests/test_example_diffs.rs53
2 files changed, 73 insertions, 9 deletions
diff --git a/src/handlers/diff_header_misc.rs b/src/handlers/diff_header_misc.rs
index eb0833de..141767ae 100644
--- a/src/handlers/diff_header_misc.rs
+++ b/src/handlers/diff_header_misc.rs
@@ -2,15 +2,38 @@ use crate::delta::{DiffType, Source, State, StateMachine};
impl<'a> StateMachine<'a> {
#[inline]
- fn test_diff_header_misc_cases(&self) -> bool {
+ fn test_diff_file_missing(&self) -> bool {
self.source == Source::DiffUnified && self.line.starts_with("Only in ")
- || self.line.starts_with("Binary files ")
+ }
+
+ #[inline]
+ fn test_diff_is_binary(&self) -> bool {
+ self.line.starts_with("Binary files ")
}
pub fn handle_diff_header_misc_line(&mut self) -> std::io::Result<bool> {
- if !self.test_diff_header_misc_cases() {
+ let is_binary: bool = self.test_diff_is_binary();
+ let file_missing: bool = self.test_diff_file_missing();
+
+ if !file_missing && !is_binary {
return Ok(false);
}
+
+ if is_binary {
+ match (self.minus_file.as_str(), self.plus_file.as_str()) {
+ ("", "") => {
+ return self.handle_additional_cases(match self.state {
+ State::DiffHeader(_) => self.state.clone(),
+ _ => State::DiffHeader(DiffType::Unified),
+ });
+ }
+ ("/dev/null", _) => self.plus_file.push_str(" (binary file)"),
+ (_, "/dev/null") => self.minus_file.push_str(" (binary file)"),
+ (_, _) => (),
+ };
+ return Ok(true);
+ }
+
self.handle_additional_cases(match self.state {
State::DiffHeader(_) => self.state.clone(),
_ => State::DiffHeader(DiffType::Unified),
diff --git a/src/tests/test_example_diffs.rs b/src/tests/test_example_diffs.rs
index 204053db..9790d95a 100644
--- a/src/tests/test_example_diffs.rs
+++ b/src/tests/test_example_diffs.rs
@@ -240,7 +240,23 @@ mod tests {
let config = integration_test_utils::make_config_from_args(&[]);
let output = integration_test_utils::run_delta(BINARY_FILES_DIFFER, &config);
let output = strip_ansi_codes(&output);
- assert!(output.contains("Binary files /dev/null and b/foo differ\n"));
+ assert!(output.contains("Binary files a/foo and b/foo differ\n"));
+ }
+
+ #[test]
+ fn test_binary_file_added() {
+ let config = integration_test_utils::make_config_from_args(&[]);
+ let output = integration_test_utils::run_delta(BINARY_FILE_ADDED, &config);
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains("added: foo (binary file)\n"));
+ }
+
+ #[test]
+ fn test_binary_file_removed() {
+ let config = integration_test_utils::make_config_from_args(&[]);
+ let output = integration_test_utils::run_delta(BINARY_FILE_REMOVED, &config);
+ let output = strip_ansi_codes(&output);
+ assert!(output.contains("removed: foo (binary file)\n"));
}
#[test]
@@ -2241,18 +2257,43 @@ index ba28bfd..0000000
";
const BINARY_FILES_DIFFER: &str = "
-commit ad023698217b086f1bef934be62b4523c95f64d9 (HEAD -> master)
-Author: Dan Davison <dandavison7@gmail.com>
-Date: Wed Feb 12 08:05:53 2020 -0600
+commit 7d58b736b09788d65392cef1bf3dcc647165f7e7 (HEAD -> main)
+Author: Sondeyy <nils.boettcher@posteo.de>
+Date: Sat Aug 5 16:22:38 2023 +0200
- .
+ modified bin file
+
+diff --git a/foo b/foo
+index c9bbb35..5fc172d 100644
+Binary files a/foo and b/foo differ
+";
+
+ const BINARY_FILE_ADDED: &str = "
+commit 7d58b736b09788d65392cef1bf3dcc647165f7e7 (HEAD -> main)
+Author: Sondeyy <nils.boettcher@posteo.de>
+Date: Sat Aug 5 16:22:38 2023 +0200
+
+ added binary file
diff --git a/foo b/foo
new file mode 100644
-index 0000000..b572921
+index c9bbb35..5fc172d 100644
Binary files /dev/null and b/foo differ
";
+ const BINARY_FILE_REMOVED: &str = "
+commit 7d58b736b09788d65392cef1bf3dcc647165f7e7 (HEAD -> main)
+Author: Sondeyy <nils.boettcher@posteo.de>
+Date: Sat Aug 5 16:22:38 2023 +0200
+
+ removed binary file
+
+diff --git a/foo b/foo
+deleted file mode 100644
+index c9bbb35..5fc172d 100644
+Binary files a/foo and /dev/null differ
+";
+
const GIT_DIFF_WITH_COPIED_FILE: &str = "
commit f600ed5ced4d98295ffa97571ed240cd86c34ac6 (HEAD -> master)
Author: Dan Davison <dandavison7@gmail.com>