summaryrefslogtreecommitdiffstats
path: root/src/parse.rs
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2021-05-20 14:45:08 -0400
committerGitHub <noreply@github.com>2021-05-20 14:45:08 -0400
commit1bf8479bb19be230b61a11ba3f74d7341ffd6914 (patch)
tree90c65b69c9bb30a8824b685f72be69ed5e1fbbd5 /src/parse.rs
parentfe16f7533deb55e83ed0d736e1cd826ad8ae7522 (diff)
Emit 'mode [-+]x' instead of full file permission bits (#607)
Ref #583
Diffstat (limited to 'src/parse.rs')
-rw-r--r--src/parse.rs10
1 files changed, 7 insertions, 3 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),