Parse apps after parsing environment in app.json

This commit is contained in:
loki
2020-05-01 13:32:26 +02:00
parent af1135d455
commit 1b1d514d10

View File

@@ -242,16 +242,24 @@ std::optional<proc::proc_t> parse(const std::string& file_name) {
auto this_env = boost::this_process::environment(); auto this_env = boost::this_process::environment();
for(auto &[name,val] : env_vars) {
this_env[name] = parse_env_val(this_env, val.get_value<std::string>());
}
std::vector<proc::ctx_t> apps; std::vector<proc::ctx_t> apps;
for(auto &[_,app_node] : apps_node) { for(auto &[_,app_node] : apps_node) {
proc::ctx_t ctx; proc::ctx_t ctx;
auto &prep_nodes = app_node.get_child("prep-cmd"s); auto prep_nodes_opt = app_node.get_child_optional("prep-cmd"s);
auto output = app_node.get_optional<std::string>("output"s); auto output = app_node.get_optional<std::string>("output"s);
auto name = parse_env_val(this_env, app_node.get<std::string>("name"s)); auto name = parse_env_val(this_env, app_node.get<std::string>("name"s));
auto cmd = app_node.get_optional<std::string>("cmd"s); auto cmd = app_node.get_optional<std::string>("cmd"s);
std::vector<proc::cmd_t> prep_cmds; std::vector<proc::cmd_t> prep_cmds;
if(prep_nodes_opt) {
auto &prep_nodes = *prep_nodes_opt;
prep_cmds.reserve(prep_nodes.size()); prep_cmds.reserve(prep_nodes.size());
for(auto &[_, prep_node] : prep_nodes) { for(auto &[_, prep_node] : prep_nodes) {
auto do_cmd = parse_env_val(this_env, prep_node.get<std::string>("do"s)); auto do_cmd = parse_env_val(this_env, prep_node.get<std::string>("do"s));
@@ -264,6 +272,7 @@ std::optional<proc::proc_t> parse(const std::string& file_name) {
prep_cmds.emplace_back(std::move(do_cmd)); prep_cmds.emplace_back(std::move(do_cmd));
} }
} }
}
if(output) { if(output) {
ctx.output = parse_env_val(this_env, *output); ctx.output = parse_env_val(this_env, *output);
@@ -279,11 +288,6 @@ std::optional<proc::proc_t> parse(const std::string& file_name) {
apps.emplace_back(std::move(ctx)); apps.emplace_back(std::move(ctx));
} }
bp::environment env = boost::this_process::environment();
for(auto &[name,val] : env_vars) {
this_env[name] = parse_env_val(this_env, val.get_value<std::string>());
}
return proc::proc_t { return proc::proc_t {
std::move(this_env), std::move(apps) std::move(this_env), std::move(apps)
}; };