diff options
| author | 2023-07-09 13:35:47 +0100 | |
|---|---|---|
| committer | 2023-07-09 13:35:47 +0100 | |
| commit | 2905f38a80b56a15edd008de0d84ded636fdce7e (patch) | |
| tree | 1dc19336a1682929c7e0505cec8a1c202e9e7c42 /src/configparser.cpp | |
| parent | Rename <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.cpp | 9 |
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 { |
