forked from extern/nushell
Convert table of primitives to positional arguments for external cmd (#2232)
* Convert table of primitives to positional arguments for external cmd * Multiple file test, fix for cococo
This commit is contained in:
parent
2a084fc838
commit
6b4634b293
@ -62,9 +62,29 @@ async fn run_with_stdin(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do the cleanup that we need to do on any argument going out:
|
// Do the cleanup that we need to do on any argument going out:
|
||||||
let trimmed_value_string = value.as_string()?.trim_end_matches('\n').to_string();
|
match &value.value {
|
||||||
|
UntaggedValue::Table(table) => {
|
||||||
command_args.push(trimmed_value_string);
|
for t in table {
|
||||||
|
match &t.value {
|
||||||
|
UntaggedValue::Primitive(_) => {
|
||||||
|
command_args
|
||||||
|
.push(t.convert_to_string().trim_end_matches('\n').to_string());
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
return Err(ShellError::labeled_error(
|
||||||
|
"Could not convert to positional arguments",
|
||||||
|
"could not convert to positional arguments",
|
||||||
|
value.tag(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
let trimmed_value_string = value.as_string()?.trim_end_matches('\n').to_string();
|
||||||
|
command_args.push(trimmed_value_string);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let process_args = command_args
|
let process_args = command_args
|
||||||
|
@ -7,12 +7,7 @@ pub fn cococo() {
|
|||||||
// Write back out all the arguments passed
|
// Write back out all the arguments passed
|
||||||
// if given at least 1 instead of chickens
|
// if given at least 1 instead of chickens
|
||||||
// speaking co co co.
|
// speaking co co co.
|
||||||
let mut arguments = args.iter();
|
println!("{}", &args[1..].join(" "));
|
||||||
arguments.next();
|
|
||||||
|
|
||||||
for arg in arguments {
|
|
||||||
println!("{}", &arg);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
println!("cococo");
|
println!("cococo");
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ fn shorthand_doesnt_reorder_arguments() {
|
|||||||
"FOO=BARRRR nu --testbin cococo first second"
|
"FOO=BARRRR nu --testbin cococo first second"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(actual.out, "firstsecond");
|
assert_eq!(actual.out, "first second");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -271,3 +271,34 @@ mod tilde_expansion {
|
|||||||
assert_eq!(actual.out, "1~1");
|
assert_eq!(actual.out, "1~1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod external_command_arguments {
|
||||||
|
use super::nu;
|
||||||
|
use nu_test_support::fs::Stub::EmptyFile;
|
||||||
|
use nu_test_support::{pipeline, playground::Playground};
|
||||||
|
#[test]
|
||||||
|
fn expands_table_of_primitives_to_positional_arguments() {
|
||||||
|
Playground::setup(
|
||||||
|
"expands_table_of_primitives_to_positional_arguments",
|
||||||
|
|dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![
|
||||||
|
EmptyFile("jonathan_likes_cake.txt"),
|
||||||
|
EmptyFile("andres_likes_arepas.txt"),
|
||||||
|
EmptyFile("ferris_not_here.txt"),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: dirs.test(), pipeline(
|
||||||
|
r#"
|
||||||
|
nu --testbin cococo $(ls | get name)
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
actual.out,
|
||||||
|
"andres_likes_arepas.txt ferris_not_here.txt jonathan_likes_cake.txt"
|
||||||
|
);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user