#include "command.hh" #include "common-args.hh" #include "shared.hh" #include "store-api.hh" #include "gc-store.hh" using namespace nix; struct CmdStoreGC : StoreCommand, MixDryRun { GCOptions options; CmdStoreGC() { addFlag({ .longName = "max", .description = "Stop after freeing *n* bytes of disk space.", .labels = {"n"}, .handler = {&options.maxFreed} }); } std::string description() override { return "perform garbage collection on a Nix store"; } std::string doc() override { return #include "store-gc.md" ; } void run(ref store) override { auto & gcStore = GcStore::require(*store); options.action = dryRun ? GCOptions::gcReturnDead : GCOptions::gcDeleteDead; GCResults results; PrintFreed freed(options.action == GCOptions::gcDeleteDead, results); gcStore.collectGarbage(options, results); } }; static auto rCmdStoreGC = registerCommand2({"store", "gc"});