aboutsummaryrefslogtreecommitdiff
path: root/src/configparser.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2023-07-09 13:35:47 +0100
committerGravatar Sadie Powell2023-07-09 13:35:47 +0100
commit2905f38a80b56a15edd008de0d84ded636fdce7e (patch)
tree1dc19336a1682929c7e0505cec8a1c202e9e7c42 /src/configparser.cpp
parentRename <service> to <services>. (diff)
Allow <define> tags to not redefine a variable if already set.
This is useful for having a provider config which uses entities but has defaults to fall back to when they are not defined.
Diffstat (limited to 'src/configparser.cpp')
-rw-r--r--src/configparser.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/configparser.cpp b/src/configparser.cpp
index 79d9b2152..22b0934ed 100644
--- a/src/configparser.cpp
+++ b/src/configparser.cpp
@@ -271,11 +271,12 @@ struct Parser final
}
else if (stdalgo::string::equalsci(name, "define"))
{
- std::string varname = tag->getString("name");
- std::string value = tag->getString("value");
+ const std::string varname = tag->getString("name");
if (varname.empty())
- throw CoreException("Variable definition must include variable name");
- stack.vars[varname] = value;
+ throw CoreException("Variable definition must include a variable name, at " + tag->source.str());
+
+ if (stack.vars.find(varname) == stack.vars.end() || tag->getBool("replace", true))
+ stack.vars[varname] = tag->getString("value");
}
else
{