mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-10 08:16:15 +02:00
parent
bfee9a2581
commit
6cc2a8f8ed
1 changed files with 17 additions and 11 deletions
|
@ -786,6 +786,9 @@ private:
|
|||
/* Outputs that are already valid. */
|
||||
PathSet validPaths;
|
||||
|
||||
/* Outputs that are corrupt or not valid. */
|
||||
PathSet missingPaths;
|
||||
|
||||
/* User selected for running the builder. */
|
||||
UserLock buildUser;
|
||||
|
||||
|
@ -1305,6 +1308,9 @@ void DerivationGoal::tryToBuild()
|
|||
return;
|
||||
}
|
||||
|
||||
missingPaths = outputPaths(drv.outputs);
|
||||
foreach (PathSet::iterator, i, validPaths) missingPaths.erase(*i);
|
||||
|
||||
/* If any of the outputs already exist but are not valid, delete
|
||||
them. */
|
||||
foreach (DerivationOutputs::iterator, i, drv.outputs) {
|
||||
|
@ -1442,8 +1448,8 @@ void DerivationGoal::buildDone()
|
|||
/* Some cleanup per path. We do this here and not in
|
||||
computeClosure() for convenience when the build has
|
||||
failed. */
|
||||
foreach (DerivationOutputs::iterator, i, drv.outputs) {
|
||||
Path path = i->second.path;
|
||||
foreach (PathSet::iterator, i, missingPaths) {
|
||||
Path path = *i;
|
||||
|
||||
/* If the output was already valid, just skip (discard) it. */
|
||||
if (validPaths.find(path) != validPaths.end()) continue;
|
||||
|
@ -1671,9 +1677,7 @@ int childEntry(void * arg)
|
|||
|
||||
void DerivationGoal::startBuilder()
|
||||
{
|
||||
PathSet missing = outputPaths(drv.outputs);
|
||||
foreach (PathSet::iterator, i, validPaths) missing.erase(*i);
|
||||
startNest(nest, lvlInfo, format(repair ? "repairing path(s) %1%" : "building path(s) %1%") % showPaths(missing));
|
||||
startNest(nest, lvlInfo, format(repair ? "repairing path(s) %1%" : "building path(s) %1%") % showPaths(missingPaths));
|
||||
|
||||
/* Right platform? */
|
||||
if (!canBuildLocally(drv.platform))
|
||||
|
@ -1964,7 +1968,7 @@ void DerivationGoal::startBuilder()
|
|||
/* If we're repairing, then we don't want to delete the
|
||||
corrupt outputs in advance. So rewrite them as well. */
|
||||
if (repair)
|
||||
foreach (PathSet::iterator, i, missing)
|
||||
foreach (PathSet::iterator, i, missingPaths)
|
||||
if (worker.store.isValidPath(*i) && pathExists(*i))
|
||||
redirectedBadOutputs[*i] = addHashRewrite(*i);
|
||||
}
|
||||
|
@ -2249,6 +2253,8 @@ void DerivationGoal::computeClosure()
|
|||
output paths read-only. */
|
||||
foreach (DerivationOutputs::iterator, i, drv.outputs) {
|
||||
Path path = i->second.path;
|
||||
if (missingPaths.find(path) == missingPaths.end()) continue;
|
||||
|
||||
if (!pathExists(path)) {
|
||||
throw BuildError(
|
||||
format("builder for `%1%' failed to produce output path `%2%'")
|
||||
|
@ -2330,12 +2336,12 @@ void DerivationGoal::computeClosure()
|
|||
paths referenced by each of them. If there are cycles in the
|
||||
outputs, this will fail. */
|
||||
ValidPathInfos infos;
|
||||
foreach (DerivationOutputs::iterator, i, drv.outputs) {
|
||||
foreach (PathSet::iterator, i, missingPaths) {
|
||||
ValidPathInfo info;
|
||||
info.path = i->second.path;
|
||||
info.hash = contentHashes[i->second.path].first;
|
||||
info.narSize = contentHashes[i->second.path].second;
|
||||
info.references = allReferences[i->second.path];
|
||||
info.path = *i;
|
||||
info.hash = contentHashes[*i].first;
|
||||
info.narSize = contentHashes[*i].second;
|
||||
info.references = allReferences[*i];
|
||||
info.deriver = drvPath;
|
||||
infos.push_back(info);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue