mirror of
https://github.com/nushell/nushell.git
synced 2025-06-30 06:30:08 +02:00
Fix ls
for Windows system files (#5703)
* Fix `ls` for Windows system files * Fix non-Windows builds * Make Clippy happy on non-Windows platforms * Fix new test on GitHub runners * Move ls Windows code into its own module
This commit is contained in:
@ -391,3 +391,49 @@ fn list_all_columns() {
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/// Rust's fs::metadata function is unable to read info for certain system files on Windows,
|
||||
/// like the `C:\Windows\System32\Configuration` folder. https://github.com/rust-lang/rust/issues/96980
|
||||
/// This test confirms that Nu can work around this successfully.
|
||||
#[test]
|
||||
#[cfg(windows)]
|
||||
fn can_list_system_folder() {
|
||||
// the awkward `ls Configuration* | where name == "Configuration"` thing is for speed;
|
||||
// listing the entire System32 folder is slow and `ls Configuration*` alone
|
||||
// might return more than 1 file someday
|
||||
let file_type = nu!(
|
||||
cwd: "C:\\Windows\\System32", pipeline(
|
||||
r#"ls Configuration* | where name == "Configuration" | get type.0"#
|
||||
));
|
||||
assert_eq!(file_type.out, "dir");
|
||||
|
||||
let file_size = nu!(
|
||||
cwd: "C:\\Windows\\System32", pipeline(
|
||||
r#"ls Configuration* | where name == "Configuration" | get size.0"#
|
||||
));
|
||||
assert!(file_size.out.trim() != "");
|
||||
|
||||
let file_modified = nu!(
|
||||
cwd: "C:\\Windows\\System32", pipeline(
|
||||
r#"ls Configuration* | where name == "Configuration" | get modified.0"#
|
||||
));
|
||||
assert!(file_modified.out.trim() != "");
|
||||
|
||||
let file_accessed = nu!(
|
||||
cwd: "C:\\Windows\\System32", pipeline(
|
||||
r#"ls -l Configuration* | where name == "Configuration" | get accessed.0"#
|
||||
));
|
||||
assert!(file_accessed.out.trim() != "");
|
||||
|
||||
let file_created = nu!(
|
||||
cwd: "C:\\Windows\\System32", pipeline(
|
||||
r#"ls -l Configuration* | where name == "Configuration" | get created.0"#
|
||||
));
|
||||
assert!(file_created.out.trim() != "");
|
||||
|
||||
let ls_with_filter = nu!(
|
||||
cwd: "C:\\Windows\\System32", pipeline(
|
||||
r#"ls | where size > 10mb"#
|
||||
));
|
||||
assert_eq!(ls_with_filter.err, "");
|
||||
}
|
||||
|
Reference in New Issue
Block a user