about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-08-21T11·57+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-08-21T11·57+0200
commiteadb86f44726e12988d5f21b47e4c54b49b2092b (patch)
tree7bc583f1caeba82bf09f660c0367f8d33e9b24f1
parent1d29db2a9f67af8a32b2f901a6da6697c539a50d (diff)
nix-collect-garbage: Revive --max-freed
Fixes #609.
-rw-r--r--src/libstore/store-api.cc10
-rw-r--r--src/libstore/store-api.hh9
-rw-r--r--src/nix-collect-garbage/nix-collect-garbage.cc10
3 files changed, 11 insertions, 18 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index bb0bc09330c3..a73ebd824264 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -2,20 +2,10 @@
 #include "globals.hh"
 #include "util.hh"
 
-#include <climits>
-
 
 namespace nix {
 
 
-GCOptions::GCOptions()
-{
-    action = gcDeleteDead;
-    ignoreLiveness = false;
-    maxFreed = ULLONG_MAX;
-}
-
-
 bool isInStore(const Path & path)
 {
     return isInDir(path, settings.nixStore);
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index d04a040bb95c..235017503213 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -4,6 +4,7 @@
 #include "serialise.hh"
 
 #include <string>
+#include <limits>
 #include <map>
 #include <memory>
 
@@ -36,21 +37,19 @@ struct GCOptions
         gcDeleteSpecific,
     } GCAction;
 
-    GCAction action;
+    GCAction action{gcDeleteDead};
 
     /* If `ignoreLiveness' is set, then reachability from the roots is
        ignored (dangerous!).  However, the paths must still be
        unreferenced *within* the store (i.e., there can be no other
        store paths that depend on them). */
-    bool ignoreLiveness;
+    bool ignoreLiveness{false};
 
     /* For `gcDeleteSpecific', the paths to delete. */
     PathSet pathsToDelete;
 
     /* Stop after at least `maxFreed' bytes have been freed. */
-    unsigned long long maxFreed;
-
-    GCOptions();
+    unsigned long long maxFreed{std::numeric_limits<unsigned long long>::max()};
 };
 
 
diff --git a/src/nix-collect-garbage/nix-collect-garbage.cc b/src/nix-collect-garbage/nix-collect-garbage.cc
index 253c0b53755b..bb4789aeac82 100644
--- a/src/nix-collect-garbage/nix-collect-garbage.cc
+++ b/src/nix-collect-garbage/nix-collect-garbage.cc
@@ -50,11 +50,12 @@ void removeOldGenerations(std::string dir)
 int main(int argc, char * * argv)
 {
     bool removeOld = false;
-    Strings extraArgs;
 
     return handleExceptions(argv[0], [&]() {
         initNix();
 
+        GCOptions options;
+
         parseCmdLine(argc, argv, [&](Strings::iterator & arg, const Strings::iterator & end) {
             if (*arg == "--help")
                 showManPage("nix-collect-garbage");
@@ -66,8 +67,12 @@ int main(int argc, char * * argv)
                 deleteOlderThan = getArg(*arg, arg, end);
             }
             else if (*arg == "--dry-run") dryRun = true;
+            else if (*arg == "--max-freed") {
+                long long maxFreed = getIntArg<long long>(*arg, arg, end, true);
+                options.maxFreed = maxFreed >= 0 ? maxFreed : 0;
+            }
             else
-                extraArgs.push_back(*arg);
+                return false;
             return true;
         });
 
@@ -77,7 +82,6 @@ int main(int argc, char * * argv)
         // Run the actual garbage collector.
         if (!dryRun) {
             store = openStore(false);
-            GCOptions options;
             options.action = GCOptions::gcDeleteDead;
             GCResults results;
             PrintFreed freed(true, results);