forked from lix-project/lix
nix-store --gc: Make ‘--max-freed 0’ do the right thing
That is, delete almost nothing (it will still remove unused links from /nix/store/.links).
This commit is contained in:
parent
1df702d347
commit
967d066d8e
|
@ -550,7 +550,7 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
|
||||||
} else
|
} else
|
||||||
deleteGarbage(state, path);
|
deleteGarbage(state, path);
|
||||||
|
|
||||||
if (state.options.maxFreed && state.results.bytesFreed + state.bytesInvalidated > state.options.maxFreed) {
|
if (state.results.bytesFreed + state.bytesInvalidated > state.options.maxFreed) {
|
||||||
printMsg(lvlInfo, format("deleted or invalidated more than %1% bytes; stopping") % state.options.maxFreed);
|
printMsg(lvlInfo, format("deleted or invalidated more than %1% bytes; stopping") % state.options.maxFreed);
|
||||||
throw GCLimitReached();
|
throw GCLimitReached();
|
||||||
}
|
}
|
||||||
|
@ -675,7 +675,7 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
|
||||||
throw Error(format("cannot delete path `%1%' since it is still alive") % *i);
|
throw Error(format("cannot delete path `%1%' since it is still alive") % *i);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else if (options.maxFreed > 0) {
|
||||||
|
|
||||||
if (shouldDelete(state.options.action))
|
if (shouldDelete(state.options.action))
|
||||||
printMsg(lvlError, format("deleting garbage..."));
|
printMsg(lvlError, format("deleting garbage..."));
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
|
|
||||||
#include <limits.h>
|
#include <climits>
|
||||||
|
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
@ -12,7 +12,7 @@ GCOptions::GCOptions()
|
||||||
{
|
{
|
||||||
action = gcDeleteDead;
|
action = gcDeleteDead;
|
||||||
ignoreLiveness = false;
|
ignoreLiveness = false;
|
||||||
maxFreed = 0;
|
maxFreed = ULLONG_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,7 @@ struct GCOptions
|
||||||
/* For `gcDeleteSpecific', the paths to delete. */
|
/* For `gcDeleteSpecific', the paths to delete. */
|
||||||
PathSet pathsToDelete;
|
PathSet pathsToDelete;
|
||||||
|
|
||||||
/* Stop after at least `maxFreed' bytes have been freed. 0 means
|
/* Stop after at least `maxFreed' bytes have been freed. */
|
||||||
no limit. */
|
|
||||||
unsigned long long maxFreed;
|
unsigned long long maxFreed;
|
||||||
|
|
||||||
GCOptions();
|
GCOptions();
|
||||||
|
|
|
@ -583,7 +583,7 @@ static void opGC(Strings opFlags, Strings opArgs)
|
||||||
else if (*i == "--delete") options.action = GCOptions::gcDeleteDead;
|
else if (*i == "--delete") options.action = GCOptions::gcDeleteDead;
|
||||||
else if (*i == "--max-freed") {
|
else if (*i == "--max-freed") {
|
||||||
long long maxFreed = getIntArg<long long>(*i, i, opFlags.end());
|
long long maxFreed = getIntArg<long long>(*i, i, opFlags.end());
|
||||||
options.maxFreed = maxFreed >= 1 ? maxFreed : 1;
|
options.maxFreed = maxFreed >= 0 ? maxFreed : 0;
|
||||||
}
|
}
|
||||||
else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
|
else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue