diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2009-02-27T11·04+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2009-02-27T11·04+0000 |
commit | 60cb7de336035768089cc764a3fd7e8867a8d298 (patch) | |
tree | 710ab85ccd7aa37f2df21ea5b37011273719273c | |
parent | 8ab6bc5a49686aedf85adffe322c4f016764af5f (diff) |
* Allow options from the Nix config file to be overriden from the
command line (e.g. "--option build-use-chroot true").
-rw-r--r-- | src/libmain/shared.cc | 7 | ||||
-rw-r--r-- | src/libstore/globals.cc | 12 | ||||
-rw-r--r-- | src/libstore/globals.hh | 2 |
3 files changed, 21 insertions, 0 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc index cfb34d7eb888..e080d8cc5a8a 100644 --- a/src/libmain/shared.cc +++ b/src/libmain/shared.cc @@ -243,6 +243,13 @@ static void initAndRun(int argc, char * * argv) maxSilentTime = getIntArg(arg, i, args.end()); else if (arg == "--no-build-hook") useBuildHook = false; + else if (arg == "--option") { + ++i; if (i == args.end()) throw UsageError("`--option' requires two arguments"); + string name = *i; + ++i; if (i == args.end()) throw UsageError("`--option' requires two arguments"); + string value = *i; + overrideSetting(name, tokenizeString(value)); + } else remaining.push_back(arg); } diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index 296cc4ac8029..907627b6591c 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -34,6 +34,9 @@ static bool settingsRead = false; static std::map<string, Strings> settings; +/* Overriden settings. */ +std::map<string, Strings> settingsCmdline; + string & at(Strings & ss, unsigned int n) { @@ -73,6 +76,8 @@ static void readSettings() advance(i, 2); settings[name] = Strings(i, tokens.end()); }; + + settings.insert(settingsCmdline.begin(), settingsCmdline.end()); settingsRead = true; } @@ -118,6 +123,13 @@ unsigned int queryIntSetting(const string & name, unsigned int def) } +void overrideSetting(const string & name, const Strings & value) +{ + if (settingsRead) settings[name] = value; + settingsCmdline[name] = value; +} + + void reloadSettings() { settingsRead = false; diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index b8e2bae66e65..687247cc74f4 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -101,6 +101,8 @@ bool queryBoolSetting(const string & name, bool def); unsigned int queryIntSetting(const string & name, unsigned int def); +void overrideSetting(const string & name, const Strings & value); + void reloadSettings(); |