nix-store --repair-path: Rebuild if there is no substituter

This commit is contained in:
Eelco Dolstra 2016-01-06 22:07:59 +01:00
parent caaaff3954
commit 02a66b3fd7

View file

@ -3131,6 +3131,7 @@ void SubstitutionGoal::tryNext()
/* None left. Terminate this goal and let someone else deal /* None left. Terminate this goal and let someone else deal
with it. */ with it. */
debug(format("path %1% is required, but there is no substituter that can build it") % storePath); debug(format("path %1% is required, but there is no substituter that can build it") % storePath);
/* Hack: don't indicate failure if there were no substituters. /* Hack: don't indicate failure if there were no substituters.
In that case the calling derivation should just do a In that case the calling derivation should just do a
build. */ build. */
@ -3826,8 +3827,17 @@ void LocalStore::repairPath(const Path & path)
worker.run(goals); worker.run(goals);
if (goal->getExitCode() != Goal::ecSuccess) if (goal->getExitCode() != Goal::ecSuccess) {
/* Since substituting the path didn't work, if we have a valid
deriver, then rebuild the deriver. */
Path deriver = queryDeriver(path);
if (deriver != "" && isValidPath(deriver)) {
goals.clear();
goals.insert(worker.makeDerivationGoal(deriver, StringSet(), bmRepair));
worker.run(goals);
} else
throw Error(format("cannot repair path %1%") % path, worker.exitStatus()); throw Error(format("cannot repair path %1%") % path, worker.exitStatus());
}
} }