From a37338815de6affd44f927712143f626c8e6d79d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 1 Feb 2005 22:07:48 +0000 Subject: * A GC setting `gc-keep-outputs' to specify whether output paths of derivations should be kept. --- src/libstore/globals.cc | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'src/libstore/globals.cc') diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index 52f2a0a0bffa..22820f2fe8ac 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -1,10 +1,14 @@ #include "globals.hh" +#include + + string nixStore = "/UNINIT"; string nixDataDir = "/UNINIT"; string nixLogDir = "/UNINIT"; string nixStateDir = "/UNINIT"; string nixDBPath = "/UNINIT"; +string nixConfDir = "/UNINIT"; bool keepFailed = false; @@ -17,3 +21,49 @@ Verbosity buildVerbosity = lvlInfo; unsigned int maxBuildJobs = 1; bool readOnlyMode = false; + + +static bool settingsRead = false; + +static map settings; + + +static void readSettings() +{ + Path settingsFile = (format("%1%/%2%") % nixConfDir % "nix.conf").str(); + if (!pathExists(settingsFile)) return; + string contents = readFile(settingsFile); + + unsigned int pos = 0; + + while (pos < contents.size()) { + string line; + while (pos < contents.size() && contents[pos] != '\n') + line += contents[pos++]; + pos++; + + unsigned int hash = line.find('#'); + if (hash != string::npos) + line = string(line, 0, hash); + + if (line.find_first_not_of(" ") == string::npos) continue; + + istringstream is(line); + string name, sep, value; + is >> name >> sep >> value; + if (sep != "=" || !is) + throw Error(format("illegal configuration line `%1%'") % line); + + settings[name] = value; + }; + + settingsRead = true; +} + + +string querySetting(const string & name, const string & def) +{ + if (!settingsRead) readSettings(); + map::iterator i = settings.find(name); + return i == settings.end() ? def : i->second; +} -- cgit 1.4.1