mirror of
https://github.com/nushell/nushell.git
synced 2025-01-11 00:38:23 +01:00
Filter out empty glob patterns to "glob" command (#6707)
* Filter out empty glob patterns An empty argument to the "glob" command will now produce an empty result. Working towards nushell/nushell#6653. * Run `cargo fmt --all` Just autoformatted the repo so that CI passes and we have a consistent code format across modules. * Treat empty glob argument as error The glob command will now report an empty string argument as an error instead of silently ignoring it. See https://github.com/nushell/nushell/pull/6707#discussion_r993345013. * Add tests for glob command Two small tests for the glob command, one to check that the empty string errors it, and another to sanity check the '*' glob, have been added. * Rename glob sanity check star test Co-authored-by: Kyle Anderson <kyle.anderson@uwaterloo.ca>
This commit is contained in:
parent
9d77e3fc7c
commit
1572808adb
@ -99,6 +99,16 @@ impl Command for Glob {
|
||||
let glob_pattern: Spanned<String> = call.req(engine_state, stack, 0)?;
|
||||
let depth = call.get_flag(engine_state, stack, "depth")?;
|
||||
|
||||
if glob_pattern.item.is_empty() {
|
||||
return Err(ShellError::GenericError(
|
||||
"glob pattern must not be empty".to_string(),
|
||||
"".to_string(),
|
||||
Some(glob_pattern.span),
|
||||
Some("add characters to the glob pattern".to_string()),
|
||||
Vec::new(),
|
||||
));
|
||||
}
|
||||
|
||||
let folder_depth = if let Some(depth) = depth {
|
||||
depth
|
||||
} else {
|
||||
|
39
crates/nu-command/tests/commands/glob.rs
Normal file
39
crates/nu-command/tests/commands/glob.rs
Normal file
@ -0,0 +1,39 @@
|
||||
use nu_test_support::fs::Stub::EmptyFile;
|
||||
use nu_test_support::playground::Playground;
|
||||
use nu_test_support::{nu, pipeline};
|
||||
|
||||
#[test]
|
||||
fn empty_glob_pattern_triggers_error() {
|
||||
Playground::setup("glob_test_1", |dirs, sandbox| {
|
||||
sandbox.with_files(vec![
|
||||
EmptyFile("yehuda.txt"),
|
||||
EmptyFile("jonathan.txt"),
|
||||
EmptyFile("andres.txt"),
|
||||
]);
|
||||
|
||||
let actual = nu!(
|
||||
cwd: dirs.test(),
|
||||
"glob ''",
|
||||
);
|
||||
|
||||
assert!(actual.err.contains("must not be empty"));
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nonempty_glob_lists_matching_paths() {
|
||||
Playground::setup("glob_sanity_star", |dirs, sandbox| {
|
||||
sandbox.with_files(vec![
|
||||
EmptyFile("yehuda.txt"),
|
||||
EmptyFile("jonathan.txt"),
|
||||
EmptyFile("andres.txt"),
|
||||
]);
|
||||
|
||||
let actual = nu!(
|
||||
cwd: dirs.test(),
|
||||
pipeline("glob '*' | length"),
|
||||
);
|
||||
|
||||
assert_eq!(actual.out, "3");
|
||||
})
|
||||
}
|
@ -24,6 +24,7 @@ mod flatten;
|
||||
mod format;
|
||||
mod g;
|
||||
mod get;
|
||||
mod glob;
|
||||
mod group_by;
|
||||
mod hash_;
|
||||
mod headers;
|
||||
|
Loading…
Reference in New Issue
Block a user