mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-29 09:06:15 +02:00
Don't set $preferLocalBuild and $requiredSystemFeatures in builders
With C++ std::map, doing a comparison like ‘map["foo"] == ...’ has the side-effect of adding a mapping from "foo" to the empty string if "foo" doesn't exist in the map. So we ended up setting some environment variables by accident.
This commit is contained in:
parent
5558652709
commit
7ccd946407
2 changed files with 15 additions and 8 deletions
|
@ -1263,6 +1263,13 @@ PathSet outputPaths(const DerivationOutputs & outputs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static string get(const StringPairs & map, const string & key)
|
||||||
|
{
|
||||||
|
StringPairs::const_iterator i = map.find(key);
|
||||||
|
return i == map.end() ? (string) "" : i->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool canBuildLocally(const string & platform)
|
static bool canBuildLocally(const string & platform)
|
||||||
{
|
{
|
||||||
return platform == settings.thisSystem
|
return platform == settings.thisSystem
|
||||||
|
@ -1273,9 +1280,9 @@ static bool canBuildLocally(const string & platform)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool willBuildLocally(Derivation & drv)
|
bool willBuildLocally(const Derivation & drv)
|
||||||
{
|
{
|
||||||
return drv.env["preferLocalBuild"] == "1" && canBuildLocally(drv.platform);
|
return get(drv.env, "preferLocalBuild") == "1" && canBuildLocally(drv.platform);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1610,7 +1617,7 @@ HookReply DerivationGoal::tryBuildHook()
|
||||||
/* Tell the hook about system features (beyond the system type)
|
/* Tell the hook about system features (beyond the system type)
|
||||||
required from the build machine. (The hook could parse the
|
required from the build machine. (The hook could parse the
|
||||||
drv file itself, but this is easier.) */
|
drv file itself, but this is easier.) */
|
||||||
Strings features = tokenizeString<Strings>(drv.env["requiredSystemFeatures"]);
|
Strings features = tokenizeString<Strings>(get(drv.env, "requiredSystemFeatures"));
|
||||||
foreach (Strings::iterator, i, features) checkStoreName(*i); /* !!! abuse */
|
foreach (Strings::iterator, i, features) checkStoreName(*i); /* !!! abuse */
|
||||||
|
|
||||||
/* Send the request to the hook. */
|
/* Send the request to the hook. */
|
||||||
|
@ -1768,7 +1775,7 @@ void DerivationGoal::startBuilder()
|
||||||
fixed-output derivations is by definition pure (since we
|
fixed-output derivations is by definition pure (since we
|
||||||
already know the cryptographic hash of the output). */
|
already know the cryptographic hash of the output). */
|
||||||
if (fixedOutput) {
|
if (fixedOutput) {
|
||||||
Strings varNames = tokenizeString<Strings>(drv.env["impureEnvVars"]);
|
Strings varNames = tokenizeString<Strings>(get(drv.env, "impureEnvVars"));
|
||||||
foreach (Strings::iterator, i, varNames) env[*i] = getEnv(*i);
|
foreach (Strings::iterator, i, varNames) env[*i] = getEnv(*i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1779,7 +1786,7 @@ void DerivationGoal::startBuilder()
|
||||||
temporary build directory. The text files have the format used
|
temporary build directory. The text files have the format used
|
||||||
by `nix-store --register-validity'. However, the deriver
|
by `nix-store --register-validity'. However, the deriver
|
||||||
fields are left empty. */
|
fields are left empty. */
|
||||||
string s = drv.env["exportReferencesGraph"];
|
string s = get(drv.env, "exportReferencesGraph");
|
||||||
Strings ss = tokenizeString<Strings>(s);
|
Strings ss = tokenizeString<Strings>(s);
|
||||||
if (ss.size() % 2 != 0)
|
if (ss.size() % 2 != 0)
|
||||||
throw BuildError(format("odd number of tokens in `exportReferencesGraph': `%1%'") % s);
|
throw BuildError(format("odd number of tokens in `exportReferencesGraph': `%1%'") % s);
|
||||||
|
@ -1865,7 +1872,7 @@ void DerivationGoal::startBuilder()
|
||||||
if (fixedOutput) useChroot = false;
|
if (fixedOutput) useChroot = false;
|
||||||
|
|
||||||
/* Hack to allow derivations to disable chroot builds. */
|
/* Hack to allow derivations to disable chroot builds. */
|
||||||
if (drv.env["__noChroot"] == "1") useChroot = false;
|
if (get(drv.env, "__noChroot") == "1") useChroot = false;
|
||||||
|
|
||||||
if (useChroot) {
|
if (useChroot) {
|
||||||
#if CHROOT_ENABLED
|
#if CHROOT_ENABLED
|
||||||
|
@ -2344,7 +2351,7 @@ void DerivationGoal::computeClosure()
|
||||||
refer to), check that all references are in that list. !!!
|
refer to), check that all references are in that list. !!!
|
||||||
allowedReferences should really be per-output. */
|
allowedReferences should really be per-output. */
|
||||||
if (drv.env.find("allowedReferences") != drv.env.end()) {
|
if (drv.env.find("allowedReferences") != drv.env.end()) {
|
||||||
PathSet allowed = parseReferenceSpecifiers(drv, drv.env["allowedReferences"]);
|
PathSet allowed = parseReferenceSpecifiers(drv, get(drv.env, "allowedReferences"));
|
||||||
foreach (PathSet::iterator, i, references)
|
foreach (PathSet::iterator, i, references)
|
||||||
if (allowed.find(*i) == allowed.end())
|
if (allowed.find(*i) == allowed.end())
|
||||||
throw BuildError(format("output is not allowed to refer to path `%1%'") % *i);
|
throw BuildError(format("output is not allowed to refer to path `%1%'") % *i);
|
||||||
|
|
|
@ -32,7 +32,7 @@ void queryMissing(StoreAPI & store, const PathSet & targets,
|
||||||
PathSet & willBuild, PathSet & willSubstitute, PathSet & unknown,
|
PathSet & willBuild, PathSet & willSubstitute, PathSet & unknown,
|
||||||
unsigned long long & downloadSize, unsigned long long & narSize);
|
unsigned long long & downloadSize, unsigned long long & narSize);
|
||||||
|
|
||||||
bool willBuildLocally(Derivation & drv);
|
bool willBuildLocally(const Derivation & drv);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue