diff options
author | Michael Raskin <7c6f434c@mail.ru> | 2007-11-15T03·47+0000 |
---|---|---|
committer | Michael Raskin <7c6f434c@mail.ru> | 2007-11-15T03·47+0000 |
commit | 6fc60e2060be5958c2aad1c859ee60bae5e23980 (patch) | |
tree | 6bcec3f010df805204b679e47dc964476ffff36c /src/libstore | |
parent | 5b74a5957023bd51b7ba32fc244cb08931507a52 (diff) |
Added possibility to specify garbage collection levels for store paths; so packages can share intermediate results of compilation and GC will collect it automatically while never touching tarballs, for example.
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/gc.cc | 19 | ||||
-rw-r--r-- | src/libstore/gc.hh | 6 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc index e2e6c23fd559..53ee100f96b7 100644 --- a/src/libstore/gc.cc +++ b/src/libstore/gc.cc @@ -4,6 +4,7 @@ #include "local-store.hh" #include "db.hh" #include "util.hh" +#include "gc.hh" #include <boost/shared_ptr.hpp> @@ -445,6 +446,8 @@ void LocalStore::collectGarbage(GCAction action, const PathSet & pathsToDelete, queryBoolSetting("gc-keep-outputs", false); bool gcKeepDerivations = queryBoolSetting("gc-keep-derivations", true); + unsigned int gcKeepOutputsThreshold = + queryIntSetting ("gc-keep-outputs-threshold", defaultGcLevel); /* Acquire the global GC root. This prevents a) New roots from being added. @@ -496,10 +499,18 @@ void LocalStore::collectGarbage(GCAction action, const PathSet & pathsToDelete, i != livePaths.end(); ++i) if (isDerivation(*i)) { Derivation drv = derivationFromPath(*i); - for (DerivationOutputs::iterator j = drv.outputs.begin(); - j != drv.outputs.end(); ++j) - if (store->isValidPath(j->second.path)) - computeFSClosure(j->second.path, livePaths); + + string gcLevelStr = drv.env["__gcLevel"]; + int gcLevel; + if (!string2Int(gcLevelStr,gcLevel)) { + gcLevel = defaultGcLevel; + } + + if (gcLevel >= gcKeepOutputsThreshold) + for (DerivationOutputs::iterator j = drv.outputs.begin(); + j != drv.outputs.end(); ++j) + if (store->isValidPath(j->second.path)) + computeFSClosure(j->second.path, livePaths); } } diff --git a/src/libstore/gc.hh b/src/libstore/gc.hh new file mode 100644 index 000000000000..c86f7678b3df --- /dev/null +++ b/src/libstore/gc.hh @@ -0,0 +1,6 @@ +#ifndef __GC_H_INCLUDED +#define __GC_H_INCLUDED + +const unsigned int defaultGcLevel = 1000; + +#endif //__GC_H_INCLUDED |