From 1b1d514d10402f833fe1f5dcb314c345bcebd3e0 Mon Sep 17 00:00:00 2001 From: loki Date: Fri, 1 May 2020 13:32:26 +0200 Subject: [PATCH] Parse apps after parsing environment in app.json --- sunshine/process.cpp | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/sunshine/process.cpp b/sunshine/process.cpp index 5eef5090..ec2aa2fe 100644 --- a/sunshine/process.cpp +++ b/sunshine/process.cpp @@ -242,26 +242,35 @@ std::optional parse(const std::string& file_name) { 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::vector apps; for(auto &[_,app_node] : apps_node) { 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("output"s); auto name = parse_env_val(this_env, app_node.get("name"s)); auto cmd = app_node.get_optional("cmd"s); std::vector 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("do"s)); - auto undo_cmd = prep_node.get_optional("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)); + if(prep_nodes_opt) { + auto &prep_nodes = *prep_nodes_opt; + + prep_cmds.reserve(prep_nodes.size()); + for(auto &[_, prep_node] : prep_nodes) { + auto do_cmd = parse_env_val(this_env, prep_node.get("do"s)); + auto undo_cmd = prep_node.get_optional("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 parse(const std::string& file_name) { 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()); - } - return proc::proc_t { std::move(this_env), std::move(apps) };