forked from lix-project/lix
* `nix-store --gc --print-dead': print the total size of the store
objects that would be freed.
This commit is contained in:
parent
92f7dfa5b7
commit
4250b641d8
|
@ -515,6 +515,15 @@ void collectGarbage(GCAction action, const PathSet & pathsToDelete,
|
||||||
debug(format("dead path `%1%'") % *i);
|
debug(format("dead path `%1%'") % *i);
|
||||||
result.insert(*i);
|
result.insert(*i);
|
||||||
|
|
||||||
|
/* If just returning the set of dead paths, we also return the
|
||||||
|
space that would be freed if we deleted them. */
|
||||||
|
if (action == gcReturnDead) {
|
||||||
|
struct stat st;
|
||||||
|
if (lstat(i->c_str(), &st) == -1)
|
||||||
|
st.st_size = 0;
|
||||||
|
bytesFreed += st.st_size;
|
||||||
|
}
|
||||||
|
|
||||||
if (action == gcDeleteDead || action == gcDeleteSpecific) {
|
if (action == gcDeleteDead || action == gcDeleteSpecific) {
|
||||||
|
|
||||||
#ifndef __CYGWIN__
|
#ifndef __CYGWIN__
|
||||||
|
|
|
@ -492,13 +492,17 @@ static void opCheckValidity(Strings opFlags, Strings opArgs)
|
||||||
|
|
||||||
struct PrintFreed
|
struct PrintFreed
|
||||||
{
|
{
|
||||||
bool show;
|
bool show, dryRun;
|
||||||
unsigned long long bytesFreed;
|
unsigned long long bytesFreed;
|
||||||
PrintFreed(bool _show) : bytesFreed(0), show(_show) { }
|
PrintFreed(bool show, bool dryRun)
|
||||||
|
: bytesFreed(0), show(show), dryRun(dryRun) { }
|
||||||
~PrintFreed()
|
~PrintFreed()
|
||||||
{
|
{
|
||||||
if (show)
|
if (show)
|
||||||
cout << format("%d bytes freed (%.2f MiB)\n")
|
cout << format(
|
||||||
|
(dryRun
|
||||||
|
? "%d bytes would be freed (%.2f MiB)\n"
|
||||||
|
: "%d bytes freed (%.2f MiB)\n"))
|
||||||
% bytesFreed % (bytesFreed / (1024.0 * 1024.0));
|
% bytesFreed % (bytesFreed / (1024.0 * 1024.0));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -518,7 +522,8 @@ static void opGC(Strings opFlags, Strings opArgs)
|
||||||
else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
|
else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
|
||||||
|
|
||||||
PathSet result;
|
PathSet result;
|
||||||
PrintFreed freed(action == gcDeleteDead);
|
PrintFreed freed(action == gcDeleteDead || action == gcReturnDead,
|
||||||
|
action == gcReturnDead);
|
||||||
collectGarbage(action, PathSet(), false, result, freed.bytesFreed);
|
collectGarbage(action, PathSet(), false, result, freed.bytesFreed);
|
||||||
|
|
||||||
if (action != gcDeleteDead) {
|
if (action != gcDeleteDead) {
|
||||||
|
@ -546,7 +551,7 @@ static void opDelete(Strings opFlags, Strings opArgs)
|
||||||
pathsToDelete.insert(fixPath(*i));
|
pathsToDelete.insert(fixPath(*i));
|
||||||
|
|
||||||
PathSet dummy;
|
PathSet dummy;
|
||||||
PrintFreed freed(true);
|
PrintFreed freed(true, false);
|
||||||
collectGarbage(gcDeleteSpecific, pathsToDelete, ignoreLiveness,
|
collectGarbage(gcDeleteSpecific, pathsToDelete, ignoreLiveness,
|
||||||
dummy, freed.bytesFreed);
|
dummy, freed.bytesFreed);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue