mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
test: add a function to compare the xattr between two files.
used by cp & mv (at least)
This commit is contained in:
parent
fe3f8293ef
commit
238fb776ad
1 changed files with 42 additions and 0 deletions
|
@ -756,6 +756,26 @@ pub fn get_root_path() -> &'static str {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Compares the extended attributes (xattrs) of two files or directories.
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
///
|
||||||
|
/// `true` if both paths have the same set of extended attributes, `false` otherwise.
|
||||||
|
#[cfg(all(unix, not(target_os = "macos")))]
|
||||||
|
pub fn compare_xattrs<P: AsRef<std::path::Path>>(path1: P, path2: P) -> bool {
|
||||||
|
let get_sorted_xattrs = |path: P| {
|
||||||
|
xattr::list(path)
|
||||||
|
.map(|attrs| {
|
||||||
|
let mut attrs = attrs.collect::<Vec<_>>();
|
||||||
|
attrs.sort();
|
||||||
|
attrs
|
||||||
|
})
|
||||||
|
.unwrap_or_else(|_| Vec::new())
|
||||||
|
};
|
||||||
|
|
||||||
|
get_sorted_xattrs(path1) == get_sorted_xattrs(path2)
|
||||||
|
}
|
||||||
|
|
||||||
/// Object-oriented path struct that represents and operates on
|
/// Object-oriented path struct that represents and operates on
|
||||||
/// paths relative to the directory it was constructed for.
|
/// paths relative to the directory it was constructed for.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -3375,4 +3395,26 @@ mod tests {
|
||||||
);
|
);
|
||||||
assert!(command.tmpd.is_some());
|
assert!(command.tmpd.is_some());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(all(unix, not(target_os = "macos")))]
|
||||||
|
#[test]
|
||||||
|
fn test_compare_xattrs() {
|
||||||
|
use tempfile::tempdir;
|
||||||
|
|
||||||
|
let temp_dir = tempdir().unwrap();
|
||||||
|
let file_path1 = temp_dir.path().join("test_file1.txt");
|
||||||
|
let file_path2 = temp_dir.path().join("test_file2.txt");
|
||||||
|
|
||||||
|
File::create(&file_path1).unwrap();
|
||||||
|
File::create(&file_path2).unwrap();
|
||||||
|
|
||||||
|
let test_attr = "user.test_attr";
|
||||||
|
let test_value = b"test value";
|
||||||
|
xattr::set(&file_path1, test_attr, test_value).unwrap();
|
||||||
|
|
||||||
|
assert!(!compare_xattrs(&file_path1, &file_path2));
|
||||||
|
|
||||||
|
xattr::set(&file_path2, test_attr, test_value).unwrap();
|
||||||
|
assert!(compare_xattrs(&file_path1, &file_path2));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue