build: fix path repairing when hash rewriting is required
Handle store path repairing on darwin when sandboxing is enabled. Unlike on linux sandboxing on darwin still requires hash rewriting.
This commit is contained in:
+11
-13
@@ -3567,19 +3567,6 @@ void DerivationGoal::registerOutputs()
|
||||
if (!missingPaths.count(i.second.path)) continue;
|
||||
|
||||
Path actualPath = path;
|
||||
if (useChroot) {
|
||||
actualPath = chrootRootDir + path;
|
||||
if (pathExists(actualPath)) {
|
||||
/* Move output paths from the chroot to the Nix store. */
|
||||
if (buildMode == bmRepair)
|
||||
replaceValidPath(path, actualPath);
|
||||
else
|
||||
if (buildMode != bmCheck && rename(actualPath.c_str(), worker.store.toRealPath(path).c_str()) == -1)
|
||||
throw SysError(format("moving build output '%1%' from the sandbox to the Nix store") % path);
|
||||
}
|
||||
if (buildMode != bmCheck) actualPath = worker.store.toRealPath(path);
|
||||
}
|
||||
|
||||
if (needsHashRewrite()) {
|
||||
auto r = redirectedOutputs.find(i.second.path);
|
||||
if (r != redirectedOutputs.end()) {
|
||||
@@ -3591,6 +3578,17 @@ void DerivationGoal::registerOutputs()
|
||||
if (buildMode == bmCheck)
|
||||
actualPath = redirected;
|
||||
}
|
||||
} else if (useChroot) {
|
||||
actualPath = chrootRootDir + path;
|
||||
if (pathExists(actualPath)) {
|
||||
/* Move output paths from the chroot to the Nix store. */
|
||||
if (buildMode == bmRepair)
|
||||
replaceValidPath(path, actualPath);
|
||||
else
|
||||
if (buildMode != bmCheck && rename(actualPath.c_str(), worker.store.toRealPath(path).c_str()) == -1)
|
||||
throw SysError(format("moving build output '%1%' from the sandbox to the Nix store") % path);
|
||||
}
|
||||
if (buildMode != bmCheck) actualPath = worker.store.toRealPath(path);
|
||||
}
|
||||
|
||||
struct stat st;
|
||||
|
||||
Reference in New Issue
Block a user