fix(metadata set): return error when both --datasource-filepath and -datasource-ls are used (#16049)

# Description

This PR improves the `metadata set` command by returning a clear error
when both `--datasource-filepath` and `--datasource-ls` flags are used
together. These flags are meant to be mutually exclusive, and previously
this conflicting usage was silently ignored.

# User-Facing Changes

* Users will now see an error message if they use both
`--datasource-filepath` and `--datasource-ls` together in `metadata
set`.

# Tests + Formatting

* [x] Added test at
`crates/nu-command/tests/commands/debug/metadata_set.rs` to verify the
error behavior.
* [x] Ran `cargo fmt --all -- --check`
* [x] Ran `cargo clippy --workspace -- -D warnings -D
clippy::unwrap_used`
* [x] Ran `cargo test --workspace`


# After Submitting

N/A
This commit is contained in:
Kumar Ujjawal
2025-07-02 23:10:34 +05:30
committed by GitHub
parent a340e965e8
commit 118857aedc
4 changed files with 67 additions and 2 deletions

View File

@ -0,0 +1,43 @@
use nu_test_support::nu;
use nu_test_support::pipeline;
#[test]
fn errors_on_conflicting_metadata_flags() {
let actual = nu!(
cwd: ".", pipeline(
r#"
echo "foo" | metadata set --datasource-filepath foo.txt --datasource-ls
"#
));
assert!(actual.err.contains("cannot use `--datasource-filepath`"));
assert!(actual.err.contains("with `--datasource-ls`"));
}
#[test]
fn works_with_datasource_filepath() {
let actual = nu!(
cwd: ".", pipeline(
r#"
echo "foo"
| metadata set --datasource-filepath foo.txt
| metadata
"#
));
assert!(actual.out.contains("foo.txt"));
}
#[test]
fn works_with_datasource_ls() {
let actual = nu!(
cwd: ".", pipeline(
r#"
echo "foo"
| metadata set --datasource-ls
| metadata
"#
));
assert!(actual.out.contains("ls"));
}

View File

@ -1 +1,2 @@
mod metadata_set;
mod timeit;