If gc-keep-derivations is set, only keep the actual deriver

This prevents zillions of derivations from being kept, and fixes an
infinite recursion in the garbage collector (due to an obscure cycle
that can occur with fixed-output derivations).
This commit is contained in:
Eelco Dolstra 2012-12-19 15:33:09 +01:00
parent fbf0b2fa45
commit e775d4d84f

View file

@ -473,7 +473,7 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
if (state.gcKeepDerivations && isDerivation(p)) {
PathSet outputs = queryDerivationOutputs(p);
foreach (PathSet::iterator, i, outputs)
if (isValidPath(*i)) todo.insert(*i);
if (isValidPath(*i) && queryDeriver(*i) == p) todo.insert(*i);
}
/* If gc-keep-outputs is set, then don't delete this path
if there are derivers of this path that are not