diff options
author | alois31 <alois1@gmx-topmail.de> | 2024-10-23 15:20:51 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@localhost> | 2024-10-23 15:20:51 +0000 |
commit | 2734a9cf94debc6baef4e7d4d9fa28cc28f5b31d (patch) | |
tree | ba6be97cc5ac268941b1c8ac10507786a720357c /src/libutil | |
parent | 5f1344dd8aec59ce654a0fac30b1842e2e68299c (diff) | |
parent | 689eb45630a183f0fbbd8864cb7a3c7cb1704451 (diff) |
* changes:
treewide: make more settings conditionally available
libstore/build: only send overridden settings to the build hook
treewide: consistently mark overridden settings as such
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/config-impl.hh | 12 | ||||
-rw-r--r-- | src/libutil/config.cc | 5 | ||||
-rw-r--r-- | src/libutil/config.hh | 17 |
3 files changed, 14 insertions, 20 deletions
diff --git a/src/libutil/config-impl.hh b/src/libutil/config-impl.hh index 748107b6e..2342c9a03 100644 --- a/src/libutil/config-impl.hh +++ b/src/libutil/config-impl.hh @@ -65,6 +65,7 @@ void BaseSetting<T>::appendOrSet(T newValue, bool append, const ApplyConfigOptio "using default `appendOrSet` implementation with an appendable type"); assert(!append); + overridden = true; value = std::move(newValue); } @@ -85,6 +86,13 @@ void BaseSetting<T>::set(const std::string & str, bool append, const ApplyConfig } } +template<typename T> +void BaseSetting<T>::override(const T & v) +{ + overridden = true; + value = v; +} + template<> void BaseSetting<bool>::convertToArg(Args & args, const std::string & category); template<typename T> @@ -95,7 +103,7 @@ void BaseSetting<T>::convertToArg(Args & args, const std::string & category) .description = fmt("Set the `%s` setting.", name), .category = category, .labels = {"value"}, - .handler = {[this](std::string s) { overridden = true; set(s); }}, + .handler = {[this](std::string s) { set(s); }}, .experimentalFeature = experimentalFeature, }); @@ -105,7 +113,7 @@ void BaseSetting<T>::convertToArg(Args & args, const std::string & category) .description = fmt("Append to the `%s` setting.", name), .category = category, .labels = {"value"}, - .handler = {[this](std::string s) { overridden = true; set(s, true); }}, + .handler = {[this](std::string s) { set(s, true); }}, .experimentalFeature = experimentalFeature, }); } diff --git a/src/libutil/config.cc b/src/libutil/config.cc index 778da1413..f600a10ca 100644 --- a/src/libutil/config.cc +++ b/src/libutil/config.cc @@ -32,7 +32,6 @@ bool Config::set(const std::string & name, const std::string & value, const Appl return false; } i->second.setting->set(value, append, options); - i->second.setting->overridden = true; return true; } @@ -46,7 +45,6 @@ void Config::addSetting(AbstractSetting * setting) if (auto i = unknownSettings.find(setting->name); i != unknownSettings.end()) { setting->set(std::move(i->second)); - setting->overridden = true; unknownSettings.erase(i); set = true; } @@ -58,7 +56,6 @@ void Config::addSetting(AbstractSetting * setting) alias, setting->name); else { setting->set(std::move(i->second)); - setting->overridden = true; unknownSettings.erase(i); set = true; } @@ -80,7 +77,7 @@ void AbstractConfig::reapplyUnknownSettings() { auto unknownSettings2 = std::move(unknownSettings); unknownSettings = {}; - for (auto & s : unknownSettings2) + for (auto & s : unknownSettings2) set(s.first, s.second); } diff --git a/src/libutil/config.hh b/src/libutil/config.hh index 59cc281c5..b3dcc122f 100644 --- a/src/libutil/config.hh +++ b/src/libutil/config.hh @@ -218,6 +218,7 @@ protected: virtual void convertToArg(Args & args, const std::string & category); bool isOverridden() const; + }; /** @@ -267,16 +268,12 @@ public: { } operator const T &() const { return value; } - operator T &() { return value; } const T & get() const { return value; } template<typename U> bool operator ==(const U & v2) const { return value == v2; } template<typename U> bool operator !=(const U & v2) const { return value != v2; } template<typename U> - void operator =(const U & v) { assign(v); } - virtual void assign(const T & v) { value = v; } - template<typename U> void setDefault(const U & v) { if (!overridden) value = v; } /** @@ -287,6 +284,8 @@ public: */ void set(const std::string & str, bool append = false, const ApplyConfigOptions & options = {}) override final; + void override(const T & v); + /** * C++ trick; This is template-specialized to compile-time indicate whether * the type is appendable. @@ -299,12 +298,6 @@ public: */ bool isAppendable() override final; - virtual void override(const T & v) - { - overridden = true; - value = v; - } - std::string to_string() const override; void convertToArg(Args & args, const std::string & category) override; @@ -349,8 +342,6 @@ public: : Setting(options, def, name, description, aliases, documentDefault, std::move(experimentalFeature), true) { } - - void operator =(const T & v) { this->assign(v); } }; /** @@ -375,8 +366,6 @@ public: } T parse(const std::string & str, const ApplyConfigOptions & options) const override; - - void operator =(const T & v) { this->assign(v); } }; |