From a04a5de8f70e5c34be0f0f7ea3c6f2cd50d56982 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 14 Feb 2005 14:16:56 +0000 Subject: [PATCH] * Implement the `gc-keep-derivations' global configuretion flag. --- src/libstore/gc.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc index 98b863314..e0de6a968 100644 --- a/src/libstore/gc.cc +++ b/src/libstore/gc.cc @@ -306,7 +306,10 @@ void collectGarbage(GCAction action, PathSet & result) { 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 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) 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) { /* Hmz, identical to storePathRequisites in nix-store. */ for (PathSet::iterator i = livePaths.begin();