Skip to content

Commit 7608fa2

Browse files
authored
Merge pull request #11375 from slarse/improve-test-mode-normalization
Generalize testsupport mode normalization by filetype
2 parents 03bf914 + d214410 commit 7608fa2

File tree

1 file changed

+16
-12
lines changed
  • crates/but-testsupport/src

1 file changed

+16
-12
lines changed

crates/but-testsupport/src/lib.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,8 @@ pub fn visualize_tree(tree_id: gix::Id<'_>) -> termtree::Tree<String> {
289289
visualize_tree(tree_id.object().unwrap().peel_to_tree().unwrap().id(), None).unwrap()
290290
}
291291

292+
const FILETYPE_MASK: u32 = 0o170000;
293+
292294
/// Visualize a tree on disk with mode information.
293295
/// For convenience, skip `.git` and don't display the root.
294296
///
@@ -304,20 +306,22 @@ pub fn visualize_tree(tree_id: gix::Id<'_>) -> termtree::Tree<String> {
304306
pub fn visualize_disk_tree_skip_dot_git(root: &Path) -> anyhow::Result<termtree::Tree<String>> {
305307
use std::os::unix::fs::MetadataExt;
306308
fn normalize_mode(mode: u32) -> u32 {
307-
match mode {
308-
0o40777 => 0o40755,
309-
0o40775 => 0o40755,
310-
0o10664 => 0o10644,
311-
0o10666 => 0o10644,
312-
0o100664 => 0o100644,
313-
0o100666 => 0o100644,
314-
0o100775 => 0o100755,
315-
0o100777 => 0o100755,
316-
0o120775 => 0o120755,
317-
0o120777 => 0o120755,
318-
other => other,
309+
let normalize_permission_bits = |mode: u32| if mode & 0o100 == 0 { 0o644 } else { 0o755 };
310+
311+
match mode & FILETYPE_MASK {
312+
// File types Git cares about
313+
directory @ 0o40000 => directory | normalize_permission_bits(mode),
314+
symlink @ 0o120000 => symlink | normalize_permission_bits(mode),
315+
regular_file @ 0o100000 => regular_file | normalize_permission_bits(mode),
316+
317+
// File types Git does not care about. These may still appear in the worktree.
318+
// Note: Add more file types here if needed (e.g. socket, block device, etc)
319+
fifo @ 0o10000 => fifo | normalize_permission_bits(mode),
320+
321+
_ => panic!("Unhandled file mode {mode}"),
319322
}
320323
}
324+
321325
fn label(p: &Path, md: &std::fs::Metadata) -> String {
322326
format!(
323327
"{name}:{mode:o}",

0 commit comments

Comments
 (0)