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.
This commit is contained in:
parent
5b74a59570
commit
6fc60e2060
2 changed files with 21 additions and 4 deletions
|
@ -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,6 +499,14 @@ void LocalStore::collectGarbage(GCAction action, const PathSet & pathsToDelete,
|
|||
i != livePaths.end(); ++i)
|
||||
if (isDerivation(*i)) {
|
||||
Derivation drv = derivationFromPath(*i);
|
||||
|
||||
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))
|
||||
|
|
6
src/libstore/gc.hh
Normal file
6
src/libstore/gc.hh
Normal file
|
@ -0,0 +1,6 @@
|
|||
#ifndef __GC_H_INCLUDED
|
||||
#define __GC_H_INCLUDED
|
||||
|
||||
const unsigned int defaultGcLevel = 1000;
|
||||
|
||||
#endif //__GC_H_INCLUDED
|
Loading…
Reference in a new issue