Skip to content

Commit

Permalink
Merge pull request #2775 from LnL7/darwin-sandbox-hash-rewrite
Browse files Browse the repository at this point in the history
build: only skip hash rewriting for sandboxing on linux
  • Loading branch information
edolstra committed Apr 24, 2019
2 parents 5112a33 + b614e0e commit f225404
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/libstore/build.cc
Original file line number Diff line number Diff line change
Expand Up @@ -803,6 +803,9 @@ class DerivationGoal : public Goal
/* Whether we're currently doing a chroot build. */
bool useChroot = false;

/* Whether we need to perform hash rewriting if there are valid output paths. */
bool needsHashRewrite;

Path chrootRootDir;

/* RAII object to delete the chroot directory. */
Expand Down Expand Up @@ -994,6 +997,13 @@ DerivationGoal::DerivationGoal(const Path & drvPath, const StringSet & wantedOut
, wantedOutputs(wantedOutputs)
, buildMode(buildMode)
{
#if __linux__
needsHashRewrite = !useChroot;
#else
/* Darwin requires hash rewriting even when sandboxing is enabled. */
needsHashRewrite = true;
#endif

state = &DerivationGoal::getDerivation;
name = (format("building of '%1%'") % drvPath).str();
trace("created");
Expand Down Expand Up @@ -2073,7 +2083,7 @@ void DerivationGoal::startBuilder()
#endif
}

else {
if (needsHashRewrite) {

if (pathExists(homeDir))
throw Error(format("directory '%1%' exists; please remove it") % homeDir);
Expand Down Expand Up @@ -2873,6 +2883,10 @@ void DerivationGoal::runChild()
for (auto & i : missingPaths) {
sandboxProfile += (format("\t(subpath \"%1%\")\n") % i.c_str()).str();
}
/* Also add redirected outputs to the chroot */
for (auto & i : redirectedOutputs) {
sandboxProfile += (format("\t(subpath \"%1%\")\n") % i.second.c_str()).str();
}
sandboxProfile += ")\n";

/* Our inputs (transitive dependencies and any impurities computed above)
Expand Down Expand Up @@ -3051,7 +3065,9 @@ void DerivationGoal::registerOutputs()
throw SysError(format("moving build output '%1%' from the sandbox to the Nix store") % path);
}
if (buildMode != bmCheck) actualPath = worker.store.toRealPath(path);
} else {
}

if (needsHashRewrite) {
Path redirected = redirectedOutputs[path];
if (buildMode == bmRepair
&& redirectedBadOutputs.find(path) != redirectedBadOutputs.end()
Expand Down

0 comments on commit f225404

Please sign in to comment.