mirror of
https://github.com/nushell/nushell.git
synced 2025-06-30 14:40:06 +02:00
Add --directory (-D) flag to ls, list the directory itself instead of its contents (#5970)
* Avoid extending the directory without globs in `nu_engine::glob_from` * avoid joining a `*` to the directory without globs * remove checks on directory permission and whether it is empty The previous implemention of `nu_engine::glob_from` will extend the given directory even if it containes no glob pattern. This commit overcomes lack of consistency with the function `nu_glob::glob`. * Add flag -D to ls, to list the directory itself instead of its contents * add --directory (-d) flag to ls * correct the difference between the given path and the cwd * set default path to `.` instead of `./*` when --directory (-d) flag is true * add comments * add an example * add tests * fmt
This commit is contained in:
@ -392,6 +392,74 @@ fn list_all_columns() {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lists_with_directory_flag() {
|
||||
Playground::setup("ls_test_flag_directory_1", |dirs, sandbox| {
|
||||
sandbox
|
||||
.within("dir_files")
|
||||
.with_files(vec![EmptyFile("nushell.json")])
|
||||
.within("dir_empty");
|
||||
let actual = nu!(
|
||||
cwd: dirs.test(), pipeline(
|
||||
r#"
|
||||
cd dir_empty;
|
||||
['.' '././.' '..' '../dir_files' '../dir_files/*']
|
||||
| each { |it| ls --directory $it }
|
||||
| flatten
|
||||
| get name
|
||||
| to text
|
||||
"#
|
||||
));
|
||||
let expected = [".", ".", "..", "../dir_files", "../dir_files/nushell.json"].join("");
|
||||
#[cfg(windows)]
|
||||
let expected = expected.replace("/", "\\");
|
||||
assert_eq!(
|
||||
actual.out, expected,
|
||||
"column names are incorrect for ls --directory (-D)"
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lists_with_directory_flag_without_argument() {
|
||||
Playground::setup("ls_test_flag_directory_2", |dirs, sandbox| {
|
||||
sandbox
|
||||
.within("dir_files")
|
||||
.with_files(vec![EmptyFile("nushell.json")])
|
||||
.within("dir_empty");
|
||||
// Test if there are some files in the current directory
|
||||
let actual = nu!(
|
||||
cwd: dirs.test(), pipeline(
|
||||
r#"
|
||||
cd dir_files;
|
||||
ls --directory
|
||||
| get name
|
||||
| to text
|
||||
"#
|
||||
));
|
||||
let expected = ".";
|
||||
assert_eq!(
|
||||
actual.out, expected,
|
||||
"column names are incorrect for ls --directory (-D)"
|
||||
);
|
||||
// Test if there is no file in the current directory
|
||||
let actual = nu!(
|
||||
cwd: dirs.test(), pipeline(
|
||||
r#"
|
||||
cd dir_empty;
|
||||
ls -D
|
||||
| get name
|
||||
| to text
|
||||
"#
|
||||
));
|
||||
let expected = ".";
|
||||
assert_eq!(
|
||||
actual.out, expected,
|
||||
"column names are incorrect for ls --directory (-D)"
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/// 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.
|
||||
|
Reference in New Issue
Block a user