nix-collect-garbage: Call collectGarbage() internally

This commit is contained in:
Eelco Dolstra 2015-05-21 15:21:38 +02:00
parent 4441e4cc13
commit 13493ef97c
4 changed files with 41 additions and 24 deletions

View file

@ -342,4 +342,19 @@ RunPager::~RunPager()
} }
string showBytes(unsigned long long bytes)
{
return (format("%.2f MiB") % (bytes / (1024.0 * 1024.0))).str();
}
PrintFreed::~PrintFreed()
{
if (show)
std::cout << format("%1% store paths deleted, %2% freed\n")
% results.paths.size()
% showBytes(results.bytesFreed);
}
} }

View file

@ -83,4 +83,21 @@ private:
extern volatile ::sig_atomic_t blockInt; extern volatile ::sig_atomic_t blockInt;
/* GC helpers. */
string showBytes(unsigned long long bytes);
class GCResults;
struct PrintFreed
{
bool show;
const GCResults & results;
PrintFreed(bool show, const GCResults & results)
: show(show), results(results) { }
~PrintFreed();
};
} }

View file

@ -1,3 +1,4 @@
#include "store-api.hh"
#include "hash.hh" #include "hash.hh"
#include "shared.hh" #include "shared.hh"
#include "globals.hh" #include "globals.hh"
@ -87,7 +88,13 @@ int main(int argc, char * * argv)
if (removeOld) removeOldGenerations(profilesDir); if (removeOld) removeOldGenerations(profilesDir);
// Run the actual garbage collector. // Run the actual garbage collector.
if (!dryRun) runProgramSimple(settings.nixBinDir + "/nix-store", Strings{"--gc"}); if (!dryRun) {
store = openStore(false);
GCOptions options;
options.action = GCOptions::gcDeleteDead;
GCResults results;
PrintFreed freed(true, results);
store->collectGarbage(options, results);
}
}); });
} }

View file

@ -625,28 +625,6 @@ static void opCheckValidity(Strings opFlags, Strings opArgs)
} }
static string showBytes(unsigned long long bytes)
{
return (format("%.2f MiB") % (bytes / (1024.0 * 1024.0))).str();
}
struct PrintFreed
{
bool show;
const GCResults & results;
PrintFreed(bool show, const GCResults & results)
: show(show), results(results) { }
~PrintFreed()
{
if (show)
cout << format("%1% store paths deleted, %2% freed\n")
% results.paths.size()
% showBytes(results.bytesFreed);
}
};
static void opGC(Strings opFlags, Strings opArgs) static void opGC(Strings opFlags, Strings opArgs)
{ {
bool printRoots = false; bool printRoots = false;