diff options
author | Dan Davison <dandavison7@gmail.com> | 2021-05-20 14:45:08 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-20 14:45:08 -0400 |
commit | 1bf8479bb19be230b61a11ba3f74d7341ffd6914 (patch) | |
tree | 90c65b69c9bb30a8824b685f72be69ed5e1fbbd5 /src | |
parent | fe16f7533deb55e83ed0d736e1cd826ad8ae7522 (diff) |
Emit 'mode [-+]x' instead of full file permission bits (#607)
Ref #583
Diffstat (limited to 'src')
-rw-r--r-- | src/parse.rs | 10 | ||||
-rw-r--r-- | src/tests/test_example_diffs.rs | 28 |
2 files changed, 31 insertions, 7 deletions
diff --git a/src/parse.rs b/src/parse.rs index 3329248b..8e93dd6a 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -162,9 +162,13 @@ pub fn get_file_change_description_from_file_paths( plus_file, FileEvent::ModeChange(old_mode), FileEvent::ModeChange(new_mode), - ) if minus_file == plus_file => { - format!("{}: {} ⟶ {}", plus_file, old_mode, new_mode) - } + ) if minus_file == plus_file => match (old_mode.as_str(), new_mode.as_str()) { + // 100755 for executable and 100644 for non-executable are the only file modes Git records. + // https://medium.com/@tahteche/how-git-treats-changes-in-file-permissions-f71874ca239d + ("100644", "100755") => format!("{}: mode +x", plus_file), + ("100755", "100644") => format!("{}: mode -x", plus_file), + _ => format!("{}: {} ⟶ {}", plus_file, old_mode, new_mode), + }, (minus_file, plus_file, _, _) if minus_file == plus_file => format!( "{}{}", format_label(&config.file_modified_label), diff --git a/src/tests/test_example_diffs.rs b/src/tests/test_example_diffs.rs index a4d0b854..82b12f52 100644 --- a/src/tests/test_example_diffs.rs +++ b/src/tests/test_example_diffs.rs @@ -1570,11 +1570,25 @@ src/align.rs:71: impl<'a> Alignment<'a> { │ } #[test] - fn test_file_mode_change() { + fn test_file_mode_change_gain_executable_bit() { let config = integration_test_utils::make_config_from_args(&[]); - let output = integration_test_utils::run_delta(GIT_DIFF_FILE_MODE_CHANGE, &config); + let output = integration_test_utils::run_delta( + GIT_DIFF_FILE_MODE_CHANGE_GAIN_EXECUTABLE_BIT, + &config, + ); + let output = strip_ansi_codes(&output); + assert!(output.contains(r"src/delta.rs: mode +x")); + } + + #[test] + fn test_file_mode_change_lose_executable_bit() { + let config = integration_test_utils::make_config_from_args(&[]); + let output = integration_test_utils::run_delta( + GIT_DIFF_FILE_MODE_CHANGE_LOSE_EXECUTABLE_BIT, + &config, + ); let output = strip_ansi_codes(&output); - assert!(output.contains(r"src/delta.rs: 100644 ⟶ 100755")); + assert!(output.contains(r"src/delta.rs: mode -x")); } const GIT_DIFF_SINGLE_HUNK: &str = "\ @@ -2181,9 +2195,15 @@ Date: Sun Nov 1 15:28:53 2020 -0500 [32m+[m[32m][m "#; - const GIT_DIFF_FILE_MODE_CHANGE: &str = " + const GIT_DIFF_FILE_MODE_CHANGE_GAIN_EXECUTABLE_BIT: &str = " diff --git a/src/delta.rs b/src/delta.rs old mode 100644 new mode 100755 "; + + const GIT_DIFF_FILE_MODE_CHANGE_LOSE_EXECUTABLE_BIT: &str = " +diff --git a/src/delta.rs b/src/delta.rs +old mode 100755 +new mode 100644 +"; } |