mirror of
https://github.com/nushell/nushell
synced 2025-01-14 22:24:54 +00:00
Relax groups and blocks to output at pipeline level (#3643)
* Relax groups and blocks to output at pipeline level * Fix up tests and add ignore command
This commit is contained in:
parent
d9d956e54f
commit
fe5055cf29
11 changed files with 177 additions and 107 deletions
|
@ -70,6 +70,7 @@ pub(crate) mod help;
|
||||||
pub(crate) mod histogram;
|
pub(crate) mod histogram;
|
||||||
pub(crate) mod history;
|
pub(crate) mod history;
|
||||||
pub(crate) mod if_;
|
pub(crate) mod if_;
|
||||||
|
pub(crate) mod ignore;
|
||||||
pub(crate) mod insert;
|
pub(crate) mod insert;
|
||||||
pub(crate) mod into;
|
pub(crate) mod into;
|
||||||
pub(crate) mod keep;
|
pub(crate) mod keep;
|
||||||
|
@ -229,6 +230,7 @@ pub(crate) use headers::Headers;
|
||||||
pub(crate) use help::Help;
|
pub(crate) use help::Help;
|
||||||
pub(crate) use histogram::Histogram;
|
pub(crate) use histogram::Histogram;
|
||||||
pub(crate) use history::History;
|
pub(crate) use history::History;
|
||||||
|
pub(crate) use ignore::Ignore;
|
||||||
pub(crate) use insert::Command as Insert;
|
pub(crate) use insert::Command as Insert;
|
||||||
pub(crate) use keep::{Keep, KeepUntil, KeepWhile};
|
pub(crate) use keep::{Keep, KeepUntil, KeepWhile};
|
||||||
pub(crate) use last::Last;
|
pub(crate) use last::Last;
|
||||||
|
|
|
@ -14,7 +14,9 @@ impl WholeStreamCommand for AutoenvTrust {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn signature(&self) -> Signature {
|
fn signature(&self) -> Signature {
|
||||||
Signature::build("autoenv trust").optional("dir", SyntaxShape::String, "Directory to allow")
|
Signature::build("autoenv trust")
|
||||||
|
.optional("dir", SyntaxShape::String, "Directory to allow")
|
||||||
|
.switch("quiet", "Don't output success message", Some('q'))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn usage(&self) -> &str {
|
fn usage(&self) -> &str {
|
||||||
|
@ -23,9 +25,8 @@ impl WholeStreamCommand for AutoenvTrust {
|
||||||
|
|
||||||
fn run_with_actions(&self, args: CommandArgs) -> Result<ActionStream, ShellError> {
|
fn run_with_actions(&self, args: CommandArgs) -> Result<ActionStream, ShellError> {
|
||||||
let tag = args.call_info.name_tag.clone();
|
let tag = args.call_info.name_tag.clone();
|
||||||
let ctx = &args.context;
|
|
||||||
|
|
||||||
let file_to_trust = match args.call_info.evaluate(&ctx)?.args.nth(0) {
|
let file_to_trust = match args.opt(0)? {
|
||||||
Some(Value {
|
Some(Value {
|
||||||
value: UntaggedValue::Primitive(Primitive::String(ref path)),
|
value: UntaggedValue::Primitive(Primitive::String(ref path)),
|
||||||
tag: _,
|
tag: _,
|
||||||
|
@ -40,6 +41,7 @@ impl WholeStreamCommand for AutoenvTrust {
|
||||||
dir
|
dir
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
let quiet = args.has_flag("quiet");
|
||||||
|
|
||||||
let content = std::fs::read(&file_to_trust)?;
|
let content = std::fs::read(&file_to_trust)?;
|
||||||
|
|
||||||
|
@ -55,10 +57,14 @@ impl WholeStreamCommand for AutoenvTrust {
|
||||||
})?;
|
})?;
|
||||||
fs::write(config_path, tomlstr).expect("Couldn't write to toml file");
|
fs::write(config_path, tomlstr).expect("Couldn't write to toml file");
|
||||||
|
|
||||||
|
if quiet {
|
||||||
|
Ok(ActionStream::empty())
|
||||||
|
} else {
|
||||||
Ok(ActionStream::one(ReturnSuccess::value(
|
Ok(ActionStream::one(ReturnSuccess::value(
|
||||||
UntaggedValue::string(".nu-env trusted!").into_value(tag),
|
UntaggedValue::string(".nu-env trusted!").into_value(tag),
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
fn is_binary(&self) -> bool {
|
fn is_binary(&self) -> bool {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,9 @@ impl WholeStreamCommand for AutoenvUnTrust {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn signature(&self) -> Signature {
|
fn signature(&self) -> Signature {
|
||||||
Signature::build("autoenv untrust").optional(
|
Signature::build("autoenv untrust")
|
||||||
"dir",
|
.optional("dir", SyntaxShape::String, "Directory to disallow")
|
||||||
SyntaxShape::String,
|
.switch("quiet", "Don't output success message", Some('q'))
|
||||||
"Directory to disallow",
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn usage(&self) -> &str {
|
fn usage(&self) -> &str {
|
||||||
|
@ -27,8 +25,7 @@ impl WholeStreamCommand for AutoenvUnTrust {
|
||||||
|
|
||||||
fn run_with_actions(&self, args: CommandArgs) -> Result<ActionStream, ShellError> {
|
fn run_with_actions(&self, args: CommandArgs) -> Result<ActionStream, ShellError> {
|
||||||
let tag = args.call_info.name_tag.clone();
|
let tag = args.call_info.name_tag.clone();
|
||||||
let ctx = &args.context;
|
let file_to_untrust = match args.opt(0)? {
|
||||||
let file_to_untrust = match args.call_info.evaluate(&ctx)?.args.nth(0) {
|
|
||||||
Some(Value {
|
Some(Value {
|
||||||
value: UntaggedValue::Primitive(Primitive::String(ref path)),
|
value: UntaggedValue::Primitive(Primitive::String(ref path)),
|
||||||
tag: _,
|
tag: _,
|
||||||
|
@ -43,6 +40,7 @@ impl WholeStreamCommand for AutoenvUnTrust {
|
||||||
dir
|
dir
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
let quiet = args.has_flag("quiet");
|
||||||
|
|
||||||
let config_path = config::default_path_for(&Some(PathBuf::from("nu-env.toml")))?;
|
let config_path = config::default_path_for(&Some(PathBuf::from("nu-env.toml")))?;
|
||||||
|
|
||||||
|
@ -79,10 +77,14 @@ impl WholeStreamCommand for AutoenvUnTrust {
|
||||||
})?;
|
})?;
|
||||||
fs::write(config_path, tomlstr).expect("Couldn't write to toml file");
|
fs::write(config_path, tomlstr).expect("Couldn't write to toml file");
|
||||||
|
|
||||||
|
if quiet {
|
||||||
|
Ok(ActionStream::empty())
|
||||||
|
} else {
|
||||||
Ok(ActionStream::one(ReturnSuccess::value(
|
Ok(ActionStream::one(ReturnSuccess::value(
|
||||||
UntaggedValue::string(".nu-env untrusted!").into_value(tag),
|
UntaggedValue::string(".nu-env untrusted!").into_value(tag),
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
fn is_binary(&self) -> bool {
|
fn is_binary(&self) -> bool {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,7 +263,10 @@ fn spawn(
|
||||||
"Received unexpected type from pipeline ({})",
|
"Received unexpected type from pipeline ({})",
|
||||||
unsupported.type_name()
|
unsupported.type_name()
|
||||||
),
|
),
|
||||||
"expected a string",
|
format!(
|
||||||
|
"expected a string, got {} as input",
|
||||||
|
unsupported.type_name()
|
||||||
|
),
|
||||||
stdin_name_tag.clone(),
|
stdin_name_tag.clone(),
|
||||||
)),
|
)),
|
||||||
tag: stdin_name_tag,
|
tag: stdin_name_tag,
|
||||||
|
|
|
@ -17,6 +17,7 @@ pub fn create_default_context(interactive: bool) -> Result<EvaluationContext, Bo
|
||||||
whole_stream_command(Def),
|
whole_stream_command(Def),
|
||||||
whole_stream_command(Source),
|
whole_stream_command(Source),
|
||||||
whole_stream_command(Alias),
|
whole_stream_command(Alias),
|
||||||
|
whole_stream_command(Ignore),
|
||||||
// System/file operations
|
// System/file operations
|
||||||
whole_stream_command(Exec),
|
whole_stream_command(Exec),
|
||||||
whole_stream_command(Pwd),
|
whole_stream_command(Pwd),
|
||||||
|
|
49
crates/nu-command/src/commands/ignore.rs
Normal file
49
crates/nu-command/src/commands/ignore.rs
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
extern crate unicode_segmentation;
|
||||||
|
|
||||||
|
use crate::prelude::*;
|
||||||
|
use nu_engine::WholeStreamCommand;
|
||||||
|
use nu_errors::ShellError;
|
||||||
|
use nu_protocol::Signature;
|
||||||
|
|
||||||
|
pub struct Ignore;
|
||||||
|
|
||||||
|
impl WholeStreamCommand for Ignore {
|
||||||
|
fn name(&self) -> &str {
|
||||||
|
"ignore"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn signature(&self) -> Signature {
|
||||||
|
Signature::build("ignore")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn usage(&self) -> &str {
|
||||||
|
"Ignore the output of the previous command in the pipeline"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(&self, args: CommandArgs) -> Result<OutputStream, ShellError> {
|
||||||
|
let _: Vec<_> = args.input.collect();
|
||||||
|
|
||||||
|
Ok(OutputStream::empty())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn examples(&self) -> Vec<Example> {
|
||||||
|
vec![Example {
|
||||||
|
description: "echo done | ignore",
|
||||||
|
example: r#"echo "There are seven words in this sentence" | size"#,
|
||||||
|
result: None,
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::Ignore;
|
||||||
|
use super::ShellError;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn examples_work_as_expected() -> Result<(), ShellError> {
|
||||||
|
use crate::examples::test as test_examples;
|
||||||
|
|
||||||
|
test_examples(Ignore {})
|
||||||
|
}
|
||||||
|
}
|
|
@ -111,8 +111,13 @@ pub fn test(cmd: impl WholeStreamCommand + 'static) -> Result<(), ShellError> {
|
||||||
let block = parse_line(sample_pipeline.example, &ctx)?;
|
let block = parse_line(sample_pipeline.example, &ctx)?;
|
||||||
|
|
||||||
if let Some(expected) = &sample_pipeline.result {
|
if let Some(expected) = &sample_pipeline.result {
|
||||||
|
let start = std::time::Instant::now();
|
||||||
let result = evaluate_block(block, &mut ctx)?;
|
let result = evaluate_block(block, &mut ctx)?;
|
||||||
|
|
||||||
|
println!("input: {}", sample_pipeline.example);
|
||||||
|
println!("result: {:?}", result);
|
||||||
|
println!("done: {:?}", start.elapsed());
|
||||||
|
|
||||||
ctx.with_errors(|reasons| reasons.iter().cloned().take(1).next())
|
ctx.with_errors(|reasons| reasons.iter().cloned().take(1).next())
|
||||||
.map_or(Ok(()), Err)?;
|
.map_or(Ok(()), Err)?;
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ fn clearing_config_clears_config() {
|
||||||
)]);
|
)]);
|
||||||
|
|
||||||
assert_that!(
|
assert_that!(
|
||||||
nu.pipeline("config clear; config get skip_welcome_message"),
|
nu.pipeline("config clear | ignore; config get skip_welcome_message"),
|
||||||
says().stdout("")
|
says().stdout("")
|
||||||
);
|
);
|
||||||
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
||||||
|
@ -63,7 +63,7 @@ fn config_set_sets_value() {
|
||||||
|
|
||||||
assert_that!(
|
assert_that!(
|
||||||
//Clears config
|
//Clears config
|
||||||
nu.pipeline("config set key value; config get key"),
|
nu.pipeline("config set key value | ignore; config get key"),
|
||||||
says().stdout("value")
|
says().stdout("value")
|
||||||
);
|
);
|
||||||
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
||||||
|
@ -86,7 +86,7 @@ fn config_set_into_sets_value() {
|
||||||
|
|
||||||
assert_that!(
|
assert_that!(
|
||||||
//Clears config
|
//Clears config
|
||||||
nu.pipeline("echo value | config set_into key; config get key"),
|
nu.pipeline("echo value | config set_into key | ignore; config get key"),
|
||||||
says().stdout("value")
|
says().stdout("value")
|
||||||
);
|
);
|
||||||
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
||||||
|
@ -109,7 +109,7 @@ fn config_rm_removes_value() {
|
||||||
)]);
|
)]);
|
||||||
|
|
||||||
assert_that!(
|
assert_that!(
|
||||||
nu.pipeline("config remove key; config get key"),
|
nu.pipeline("config remove key | ignore; config get key"),
|
||||||
says().stdout("")
|
says().stdout("")
|
||||||
);
|
);
|
||||||
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
let config_contents = std::fs::read_to_string(file).expect("Could not read file");
|
||||||
|
|
|
@ -25,6 +25,8 @@ pub fn run_block(
|
||||||
|
|
||||||
let num_groups = block.block.len();
|
let num_groups = block.block.len();
|
||||||
for (group_num, group) in block.block.iter().enumerate() {
|
for (group_num, group) in block.block.iter().enumerate() {
|
||||||
|
let num_pipelines = group.pipelines.len();
|
||||||
|
for (pipeline_num, pipeline) in group.pipelines.iter().enumerate() {
|
||||||
match output {
|
match output {
|
||||||
Ok(inp) if inp.is_empty() => {}
|
Ok(inp) if inp.is_empty() => {}
|
||||||
Ok(inp) => {
|
Ok(inp) => {
|
||||||
|
@ -71,6 +73,8 @@ pub fn run_block(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
let _: Vec<_> = inp.collect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -79,8 +83,6 @@ pub fn run_block(
|
||||||
}
|
}
|
||||||
output = Ok(OutputStream::empty());
|
output = Ok(OutputStream::empty());
|
||||||
|
|
||||||
let num_pipelines = group.pipelines.len();
|
|
||||||
for (pipeline_num, pipeline) in group.pipelines.iter().enumerate() {
|
|
||||||
match output {
|
match output {
|
||||||
Ok(inp) if inp.is_empty() => {}
|
Ok(inp) if inp.is_empty() => {}
|
||||||
Ok(mut output_stream) => {
|
Ok(mut output_stream) => {
|
||||||
|
@ -122,7 +124,7 @@ pub fn run_block(
|
||||||
run_pipeline(pipeline, ctx, input, external_redirection)
|
run_pipeline(pipeline, ctx, input, external_redirection)
|
||||||
} else {
|
} else {
|
||||||
// otherwise, we're in the middle of the block, so use a default redirection
|
// otherwise, we're in the middle of the block, so use a default redirection
|
||||||
run_pipeline(pipeline, ctx, input, ExternalRedirection::Stdout)
|
run_pipeline(pipeline, ctx, input, ExternalRedirection::None)
|
||||||
};
|
};
|
||||||
|
|
||||||
input = OutputStream::empty();
|
input = OutputStream::empty();
|
||||||
|
|
|
@ -25,7 +25,7 @@ fn setting_environment_value_to_configuration_should_pick_up_into_in_memory_envi
|
||||||
)]);
|
)]);
|
||||||
|
|
||||||
assert_that!(
|
assert_that!(
|
||||||
nu.pipeline("config set env.USER NUNO; echo $nothing")
|
nu.pipeline("config set env.USER NUNO | ignore")
|
||||||
.and_then("echo $nu.env.USER"),
|
.and_then("echo $nu.env.USER"),
|
||||||
says().stdout("NUNO")
|
says().stdout("NUNO")
|
||||||
);
|
);
|
||||||
|
|
|
@ -62,7 +62,7 @@ fn picks_up_and_lets_go_env_keys_when_entering_trusted_directory_with_implied_cd
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"
|
r#"
|
||||||
do {autoenv trust foo ; = $nothing }
|
do {autoenv trust -q foo ; = $nothing }
|
||||||
foo
|
foo
|
||||||
echo $nu.env.testkey"#
|
echo $nu.env.testkey"#
|
||||||
);
|
);
|
||||||
|
@ -71,7 +71,7 @@ fn picks_up_and_lets_go_env_keys_when_entering_trusted_directory_with_implied_cd
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"
|
r#"
|
||||||
do {autoenv trust foo; = $nothing } ;
|
do {autoenv trust -q foo; = $nothing } ;
|
||||||
foo
|
foo
|
||||||
..
|
..
|
||||||
echo $nu.env.testkey
|
echo $nu.env.testkey
|
||||||
|
@ -82,8 +82,8 @@ fn picks_up_and_lets_go_env_keys_when_entering_trusted_directory_with_implied_cd
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"
|
r#"
|
||||||
do {autoenv trust foo; = $nothing } ;
|
do {autoenv trust -q foo; = $nothing } ;
|
||||||
do {autoenv trust foo/bar; = $nothing } ;
|
do {autoenv trust -q foo/bar; = $nothing } ;
|
||||||
foo/bar
|
foo/bar
|
||||||
echo $nu.env.testkey
|
echo $nu.env.testkey
|
||||||
echo $nu.env.bar
|
echo $nu.env.bar
|
||||||
|
@ -93,7 +93,7 @@ fn picks_up_and_lets_go_env_keys_when_entering_trusted_directory_with_implied_cd
|
||||||
//Assert bar removed after leaving bar
|
//Assert bar removed after leaving bar
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo;
|
r#"autoenv trust -q foo;
|
||||||
foo/bar
|
foo/bar
|
||||||
../..
|
../..
|
||||||
echo $nu.env.bar"#
|
echo $nu.env.bar"#
|
||||||
|
@ -231,7 +231,7 @@ fn entry_scripts_are_called_when_revisiting_a_trusted_directory() {
|
||||||
|
|
||||||
let actual = Trusted::in_path(&dirs, || {
|
let actual = Trusted::in_path(&dirs, || {
|
||||||
nu!(cwd: dirs.test(), r#"
|
nu!(cwd: dirs.test(), r#"
|
||||||
do { rm hello.txt ; = $nothing } ; # Silence file deletion message from output
|
do { rm hello.txt | ignore } ; # Silence file deletion message from output
|
||||||
cd ..
|
cd ..
|
||||||
cd autoenv_test_6
|
cd autoenv_test_6
|
||||||
ls | where name == "hello.txt" | get name
|
ls | where name == "hello.txt" | get name
|
||||||
|
@ -325,7 +325,7 @@ fn given_a_hierachy_of_trusted_directories_when_entering_in_any_nested_ones_shou
|
||||||
|
|
||||||
let actual = Trusted::in_path(&dirs, || {
|
let actual = Trusted::in_path(&dirs, || {
|
||||||
nu!(cwd: dirs.test().parent().unwrap(), r#"
|
nu!(cwd: dirs.test().parent().unwrap(), r#"
|
||||||
do { autoenv trust autoenv_test_9/nu_plugin_rb ; = $nothing } # Silence autoenv trust message from output
|
do { autoenv trust -q autoenv_test_9/nu_plugin_rb ; = $nothing } # Silence autoenv trust -q message from output
|
||||||
cd autoenv_test_9/nu_plugin_rb
|
cd autoenv_test_9/nu_plugin_rb
|
||||||
echo $nu.env.organization
|
echo $nu.env.organization
|
||||||
"#)
|
"#)
|
||||||
|
@ -356,7 +356,7 @@ fn given_a_hierachy_of_trusted_directories_nested_ones_should_overwrite_variable
|
||||||
|
|
||||||
let actual = Trusted::in_path(&dirs, || {
|
let actual = Trusted::in_path(&dirs, || {
|
||||||
nu!(cwd: dirs.test().parent().unwrap(), r#"
|
nu!(cwd: dirs.test().parent().unwrap(), r#"
|
||||||
do { autoenv trust autoenv_test_10/nu_plugin_rb ; = $nothing } # Silence autoenv trust message from output
|
do { autoenv trust -q autoenv_test_10/nu_plugin_rb ; = $nothing } # Silence autoenv trust -q message from output
|
||||||
cd autoenv_test_10/nu_plugin_rb
|
cd autoenv_test_10/nu_plugin_rb
|
||||||
echo $nu.env.organization
|
echo $nu.env.organization
|
||||||
"#)
|
"#)
|
||||||
|
@ -392,7 +392,7 @@ fn local_config_should_not_be_added_when_running_scripts() {
|
||||||
|
|
||||||
let actual = Trusted::in_path(&dirs, || {
|
let actual = Trusted::in_path(&dirs, || {
|
||||||
nu!(cwd: dirs.test(), r#"
|
nu!(cwd: dirs.test(), r#"
|
||||||
do { autoenv trust foo ; = $nothing } # Silence autoenv trust message from output
|
do { autoenv trust -q foo } # Silence autoenv trust message from output
|
||||||
nu script.nu
|
nu script.nu
|
||||||
"#)
|
"#)
|
||||||
});
|
});
|
||||||
|
@ -420,10 +420,10 @@ fn given_a_hierachy_of_trusted_directories_going_back_restores_overwritten_varia
|
||||||
|
|
||||||
let actual = Trusted::in_path(&dirs, || {
|
let actual = Trusted::in_path(&dirs, || {
|
||||||
nu!(cwd: dirs.test().parent().unwrap(), r#"
|
nu!(cwd: dirs.test().parent().unwrap(), r#"
|
||||||
do { autoenv trust autoenv_test_11/nu_plugin_rb ; = $nothing } # Silence autoenv trust message from output
|
do { autoenv trust -q autoenv_test_11/nu_plugin_rb } # Silence autoenv trust message from output
|
||||||
cd autoenv_test_11
|
cd autoenv_test_11
|
||||||
cd nu_plugin_rb
|
cd nu_plugin_rb
|
||||||
do { rm ../.nu-env ; = $nothing } # By deleting the root nu-env we have guarantees that the variable gets restored (not by autoenv when re-entering)
|
do { rm ../.nu-env | ignore } # By deleting the root nu-env we have guarantees that the variable gets restored (not by autoenv when re-entering)
|
||||||
cd ..
|
cd ..
|
||||||
echo $nu.env.organization
|
echo $nu.env.organization
|
||||||
"#)
|
"#)
|
||||||
|
@ -451,21 +451,21 @@ fn local_config_env_var_present_and_removed_correctly() {
|
||||||
//Assert testkey is not present before entering directory
|
//Assert testkey is not present before entering directory
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo;
|
r#"autoenv trust -q foo;
|
||||||
echo $nu.env.testkey"#
|
echo $nu.env.testkey"#
|
||||||
);
|
);
|
||||||
assert!(actual.err.contains("Unknown"));
|
assert!(actual.err.contains("Unknown"));
|
||||||
//Assert testkey is present in foo
|
//Assert testkey is present in foo
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo; cd foo
|
r#"autoenv trust -q foo; cd foo
|
||||||
echo $nu.env.testkey"#
|
echo $nu.env.testkey"#
|
||||||
);
|
);
|
||||||
assert_eq!(actual.out, "testvalue");
|
assert_eq!(actual.out, "testvalue");
|
||||||
//Assert testkey is present also in subdirectories
|
//Assert testkey is present also in subdirectories
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo; cd foo
|
r#"autoenv trust -q foo; cd foo
|
||||||
cd bar
|
cd bar
|
||||||
echo $nu.env.testkey"#
|
echo $nu.env.testkey"#
|
||||||
);
|
);
|
||||||
|
@ -473,14 +473,14 @@ fn local_config_env_var_present_and_removed_correctly() {
|
||||||
//Assert testkey is present also when jumping over foo
|
//Assert testkey is present also when jumping over foo
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo; cd foo/bar
|
r#"autoenv trust -q foo; cd foo/bar
|
||||||
echo $nu.env.testkey"#
|
echo $nu.env.testkey"#
|
||||||
);
|
);
|
||||||
assert_eq!(actual.out, "testvalue");
|
assert_eq!(actual.out, "testvalue");
|
||||||
//Assert testkey removed after leaving foo
|
//Assert testkey removed after leaving foo
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo; cd foo
|
r#"autoenv trust -q foo; cd foo
|
||||||
cd ..
|
cd ..
|
||||||
echo $nu.env.testkey"#
|
echo $nu.env.testkey"#
|
||||||
);
|
);
|
||||||
|
@ -514,22 +514,22 @@ fn local_config_env_var_gets_overwritten() {
|
||||||
//Assert overwrite_me is not present before entering directory
|
//Assert overwrite_me is not present before entering directory
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo;
|
r#"autoenv trust -q foo;
|
||||||
echo $nu.env.overwrite_me"#
|
echo $nu.env.overwrite_me"#
|
||||||
);
|
);
|
||||||
assert!(actual.err.contains("Unknown"));
|
assert!(actual.err.contains("Unknown"));
|
||||||
//Assert overwrite_me is foo in foo
|
//Assert overwrite_me is foo in foo
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo; cd foo
|
r#"autoenv trust -q foo; cd foo
|
||||||
echo $nu.env.overwrite_me"#
|
echo $nu.env.overwrite_me"#
|
||||||
);
|
);
|
||||||
assert_eq!(actual.out, "foo");
|
assert_eq!(actual.out, "foo");
|
||||||
//Assert overwrite_me is bar in bar
|
//Assert overwrite_me is bar in bar
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo | = $nothing
|
r#"autoenv trust -q foo
|
||||||
autoenv trust foo/bar | = $nothing
|
autoenv trust -q foo/bar
|
||||||
cd foo
|
cd foo
|
||||||
cd bar
|
cd bar
|
||||||
echo $nu.env.overwrite_me"#
|
echo $nu.env.overwrite_me"#
|
||||||
|
@ -538,7 +538,7 @@ fn local_config_env_var_gets_overwritten() {
|
||||||
//Assert overwrite_me is present also when jumping over foo
|
//Assert overwrite_me is present also when jumping over foo
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo; autoenv trust foo/bar; cd foo/bar
|
r#"autoenv trust -q foo; autoenv trust -q foo/bar; cd foo/bar
|
||||||
echo $nu.env.overwrite_me
|
echo $nu.env.overwrite_me
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
|
@ -546,7 +546,7 @@ fn local_config_env_var_gets_overwritten() {
|
||||||
//Assert overwrite_me removed after leaving bar
|
//Assert overwrite_me removed after leaving bar
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo; autoenv trust foo/bar; cd foo
|
r#"autoenv trust -q foo; autoenv trust -q foo/bar; cd foo
|
||||||
cd bar
|
cd bar
|
||||||
cd ..
|
cd ..
|
||||||
echo $nu.env.overwrite_me"#
|
echo $nu.env.overwrite_me"#
|
||||||
|
@ -576,7 +576,7 @@ fn autoenv_test_entry_scripts() {
|
||||||
// Make sure entryscript is run when entering directory
|
// Make sure entryscript is run when entering directory
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo
|
r#"autoenv trust -q foo
|
||||||
cd foo
|
cd foo
|
||||||
ls | where name == "hello.txt" | get name"#
|
ls | where name == "hello.txt" | get name"#
|
||||||
);
|
);
|
||||||
|
@ -585,7 +585,7 @@ fn autoenv_test_entry_scripts() {
|
||||||
// Make sure entry scripts are also run when jumping over directory
|
// Make sure entry scripts are also run when jumping over directory
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo
|
r#"autoenv trust -q foo
|
||||||
cd foo/bar
|
cd foo/bar
|
||||||
ls .. | where name == "../hello.txt" | get name"#
|
ls .. | where name == "../hello.txt" | get name"#
|
||||||
);
|
);
|
||||||
|
@ -594,7 +594,7 @@ fn autoenv_test_entry_scripts() {
|
||||||
// Entryscripts should not run after changing to a subdirectory.
|
// Entryscripts should not run after changing to a subdirectory.
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo | = $nothing
|
r#"autoenv trust -q foo
|
||||||
cd foo
|
cd foo
|
||||||
rm hello.txt
|
rm hello.txt
|
||||||
cd bar
|
cd bar
|
||||||
|
@ -621,11 +621,11 @@ fn autoenv_test_exit_scripts() {
|
||||||
// Make sure exitscript is run
|
// Make sure exitscript is run
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo | = $nothing
|
r#"autoenv trust -q foo
|
||||||
cd foo
|
cd foo
|
||||||
cd ..
|
cd ..
|
||||||
ls foo | where name =~ "bye.txt" | length
|
ls foo | where name =~ "bye.txt" | length
|
||||||
rm foo/bye.txt; cd .
|
rm foo/bye.txt | ignore; cd .
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
assert_eq!(actual.out, "1");
|
assert_eq!(actual.out, "1");
|
||||||
|
@ -633,7 +633,7 @@ fn autoenv_test_exit_scripts() {
|
||||||
// Entering a subdir should not trigger exitscripts
|
// Entering a subdir should not trigger exitscripts
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo | = $nothing
|
r#"autoenv trust -q foo
|
||||||
cd foo
|
cd foo
|
||||||
cd bar
|
cd bar
|
||||||
ls .. | where name =~ "bye.txt" | length"#
|
ls .. | where name =~ "bye.txt" | length"#
|
||||||
|
@ -643,11 +643,11 @@ fn autoenv_test_exit_scripts() {
|
||||||
// Also run exitscripts when jumping over directory
|
// Also run exitscripts when jumping over directory
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"autoenv trust foo | = $nothing
|
r#"autoenv trust -q foo
|
||||||
cd foo/bar
|
cd foo/bar
|
||||||
cd ../..
|
cd ../..
|
||||||
ls foo | where name =~ "bye.txt" | length
|
ls foo | where name =~ "bye.txt" | length
|
||||||
rm foo/bye.txt; cd ."#
|
rm foo/bye.txt | ignore; cd ."#
|
||||||
);
|
);
|
||||||
assert_eq!(actual.out, "1");
|
assert_eq!(actual.out, "1");
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue