* Implement the `gc-keep-derivations' global configuretion flag.

This commit is contained in:
Eelco Dolstra 2005-02-14 14:16:56 +00:00
parent 6a8ef36fe6
commit a04a5de8f7

View file

@ -306,7 +306,10 @@ void collectGarbage(GCAction action, PathSet & result)
{ {
result.clear(); result.clear();
bool gcKeepOutputs = queryBoolSetting("gc-keep-outputs", false); bool gcKeepOutputs =
queryBoolSetting("gc-keep-outputs", false);
bool gcKeepDerivations =
queryBoolSetting("gc-keep-derivations", true);
/* Acquire the global GC root. This prevents /* Acquire the global GC root. This prevents
a) New roots from being added. a) New roots from being added.
@ -330,6 +333,16 @@ void collectGarbage(GCAction action, PathSet & result)
for (PathSet::const_iterator i = roots.begin(); i != roots.end(); ++i) for (PathSet::const_iterator i = roots.begin(); i != roots.end(); ++i)
computeFSClosure(canonPath(*i), livePaths); computeFSClosure(canonPath(*i), livePaths);
if (gcKeepDerivations) {
for (PathSet::iterator i = livePaths.begin();
i != livePaths.end(); ++i)
{
Path deriver = queryDeriver(noTxn, *i);
if (deriver != "")
computeFSClosure(deriver, livePaths);
}
}
if (gcKeepOutputs) { if (gcKeepOutputs) {
/* Hmz, identical to storePathRequisites in nix-store. */ /* Hmz, identical to storePathRequisites in nix-store. */
for (PathSet::iterator i = livePaths.begin(); for (PathSet::iterator i = livePaths.begin();