summaryrefslogtreecommitdiff
path: root/src/command_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-05-29 05:42:26 +0000
committerMaxime Coste <frrrwww@gmail.com>2012-05-29 05:42:26 +0000
commit96c440fcaa72113e974b4bf467f708a64e0b0ac4 (patch)
treeea75f9a8cd727bb431a83aecf827035e2c3030b7 /src/command_manager.cc
parent8fedbbf07bdb972a82af2923cbe914439389c808 (diff)
CommandManager::execute can take an optional EnvVarMap argument which is used for shell evaluation
Diffstat (limited to 'src/command_manager.cc')
-rw-r--r--src/command_manager.cc17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/command_manager.cc b/src/command_manager.cc
index d348d976..fe9cc9ee 100644
--- a/src/command_manager.cc
+++ b/src/command_manager.cc
@@ -79,7 +79,8 @@ struct command_not_found : runtime_error
};
void CommandManager::execute(const String& command_line,
- const Context& context)
+ const Context& context,
+ const EnvVarMap& env_vars)
{
TokenList tokens = split(command_line);
if (tokens.empty())
@@ -92,14 +93,15 @@ void CommandManager::execute(const String& command_line,
it->second - it->first));
}
- execute(params, context);
+ execute(params, context, env_vars);
}
static void shell_eval(std::vector<String>& params,
const String& cmdline,
- const Context& context)
+ const Context& context,
+ const EnvVarMap& env_vars)
{
- String output = ShellManager::instance().eval(cmdline, context, {});
+ String output = ShellManager::instance().eval(cmdline, context, env_vars);
TokenList tokens = split(output);
for (auto it = tokens.begin(); it != tokens.end(); ++it)
@@ -110,7 +112,8 @@ static void shell_eval(std::vector<String>& params,
}
void CommandManager::execute(const CommandParameters& params,
- const Context& context)
+ const Context& context,
+ const EnvVarMap& env_vars)
{
if (params.empty())
return;
@@ -132,7 +135,7 @@ void CommandManager::execute(const CommandParameters& params,
{
shell_eval(expanded_params,
begin->substr(1, begin->length() - 2),
- context);
+ context, env_vars);
if (not expanded_params.empty())
{
command_it = m_commands.find(expanded_params[0]);
@@ -155,7 +158,7 @@ void CommandManager::execute(const CommandParameters& params,
if (param->front() == '`' and param->back() == '`')
shell_eval(expanded_params,
param->substr(1, param->length() - 2),
- context);
+ context, env_vars);
else
expanded_params.push_back(*param);
}