Parse apps after parsing environment in app.json
This commit is contained in:
@@ -242,26 +242,35 @@ 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;
|
||||||
prep_cmds.reserve(prep_nodes.size());
|
|
||||||
for(auto &[_, prep_node] : prep_nodes) {
|
|
||||||
auto do_cmd = parse_env_val(this_env, prep_node.get<std::string>("do"s));
|
|
||||||
auto undo_cmd = prep_node.get_optional<std::string>("undo"s);
|
|
||||||
|
|
||||||
if(undo_cmd) {
|
if(prep_nodes_opt) {
|
||||||
prep_cmds.emplace_back(std::move(do_cmd), parse_env_val(this_env, *undo_cmd));
|
auto &prep_nodes = *prep_nodes_opt;
|
||||||
}
|
|
||||||
else {
|
prep_cmds.reserve(prep_nodes.size());
|
||||||
prep_cmds.emplace_back(std::move(do_cmd));
|
for(auto &[_, prep_node] : prep_nodes) {
|
||||||
|
auto do_cmd = parse_env_val(this_env, prep_node.get<std::string>("do"s));
|
||||||
|
auto undo_cmd = prep_node.get_optional<std::string>("undo"s);
|
||||||
|
|
||||||
|
if(undo_cmd) {
|
||||||
|
prep_cmds.emplace_back(std::move(do_cmd), parse_env_val(this_env, *undo_cmd));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
prep_cmds.emplace_back(std::move(do_cmd));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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)
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user