Add export-env command (#6355)

* WIP Start export-env

* Add missing file

* Do not modify the parser

Let's leave that for later

* Enable tests for export-env; Fmt
This commit is contained in:
Jakub Žádník
2022-08-18 23:24:39 +03:00
committed by GitHub
parent 529c98085a
commit 5a56d47f25
8 changed files with 104 additions and 21 deletions

View File

@ -159,20 +159,7 @@ pub fn eval_call(
);
if block.redirect_env {
let caller_env_vars = caller_stack.get_env_var_names(engine_state);
// remove env vars that are present in the caller but not in the callee
// (the callee hid them)
for var in caller_env_vars.iter() {
if !callee_stack.has_env_var(engine_state, var) {
caller_stack.remove_env_var(engine_state, var);
}
}
// add new env vars from callee to caller
for (var, value) in callee_stack.get_stack_env_vars() {
caller_stack.add_env_var(var, value);
}
redirect_env(engine_state, caller_stack, &callee_stack);
}
result
@ -184,6 +171,24 @@ pub fn eval_call(
}
}
/// Redirect the environment from callee to the caller.
pub fn redirect_env(engine_state: &EngineState, caller_stack: &mut Stack, callee_stack: &Stack) {
let caller_env_vars = caller_stack.get_env_var_names(engine_state);
// remove env vars that are present in the caller but not in the callee
// (the callee hid them)
for var in caller_env_vars.iter() {
if !callee_stack.has_env_var(engine_state, var) {
caller_stack.remove_env_var(engine_state, var);
}
}
// add new env vars from callee to caller
for (var, value) in callee_stack.get_stack_env_vars() {
caller_stack.add_env_var(var, value);
}
}
/// Eval extarnal expression
///
/// It returns PipelineData with a boolean flag, indicate that if the external runs to failed.

View File

@ -11,6 +11,6 @@ pub use documentation::get_full_help;
pub use env::*;
pub use eval::{
eval_block, eval_call, eval_expression, eval_expression_with_input, eval_operator,
eval_subexpression, eval_variable,
eval_subexpression, eval_variable, redirect_env,
};
pub use glob_from::glob_from;