* Don't cache transient build hook problems.

This commit is contained in:
Eelco Dolstra 2009-04-15 06:25:02 +00:00
parent 435a93b5d8
commit dfb863f333
1 changed files with 11 additions and 6 deletions

View File

@ -1160,12 +1160,15 @@ void DerivationGoal::buildDone()
printMsg(lvlError, e.msg()); printMsg(lvlError, e.msg());
outputLocks.unlock(); outputLocks.unlock();
buildUser.release(); buildUser.release();
/* When using a build hook, the hook will return a remote
build failure using exit code 100. Anything else is a hook
problem. */
bool hookError = usingBuildHook &&
(!WIFEXITED(status) || WEXITSTATUS(status) != 100);
if (printBuildTrace) { if (printBuildTrace) {
/* When using a build hook, the hook will return a if (usingBuildHook && hookError)
remote build failure using exit code 100. Anything
else is a hook problem. */
if (usingBuildHook && (!WIFEXITED(status) || WEXITSTATUS(status) != 100))
printMsg(lvlError, format("@ hook-failed %1% %2% %3% %4%") printMsg(lvlError, format("@ hook-failed %1% %2% %3% %4%")
% drvPath % drv.outputs["out"].path % status % e.msg()); % drvPath % drv.outputs["out"].path % status % e.msg());
else else
@ -1177,8 +1180,10 @@ void DerivationGoal::buildDone()
try to build them again (negative caching). However, don't try to build them again (negative caching). However, don't
do this for fixed-output derivations, since they're likely do this for fixed-output derivations, since they're likely
to fail for transient reasons (e.g., fetchurl not being to fail for transient reasons (e.g., fetchurl not being
able to access the network). */ able to access the network). Hook errors (like
if (worker.cacheFailure && !fixedOutput) communication problems with the remote machine) shouldn't
be cached either. */
if (worker.cacheFailure && !hookError && !fixedOutput)
foreach (DerivationOutputs::iterator, i, drv.outputs) foreach (DerivationOutputs::iterator, i, drv.outputs)
worker.store.registerFailedPath(i->second.path); worker.store.registerFailedPath(i->second.path);