about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-08-01T23·14-0400
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-08-01T23·14-0400
commit967d066d8e452e59507ebae7585d6f34a4edf687 (patch)
tree15607d4c9389a274dda1ce659a41e10b06c98f12 /src
parent1df702d34733e69599a6ae21cb366348a2534b7d (diff)
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).
Diffstat (limited to 'src')
-rw-r--r--src/libstore/gc.cc4
-rw-r--r--src/libstore/store-api.cc4
-rw-r--r--src/libstore/store-api.hh3
-rw-r--r--src/nix-store/nix-store.cc2
4 files changed, 6 insertions, 7 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc
index a7547d079b..7753b3fe20 100644
--- a/src/libstore/gc.cc
+++ b/src/libstore/gc.cc
@@ -550,7 +550,7 @@ bool LocalStore::tryToDelete(GCState & state, const Path & path)
         } else
             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);
             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);
         }
         
-    } else {
+    } else if (options.maxFreed > 0) {
         
         if (shouldDelete(state.options.action))
             printMsg(lvlError, format("deleting garbage..."));
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index b64988268c..dac581e14e 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -2,7 +2,7 @@
 #include "globals.hh"
 #include "util.hh"
 
-#include <limits.h>
+#include <climits>
 
 
 namespace nix {
@@ -12,7 +12,7 @@ GCOptions::GCOptions()
 {
     action = gcDeleteDead;
     ignoreLiveness = false;
-    maxFreed = 0;
+    maxFreed = ULLONG_MAX;
 }
 
 
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index 9ba67852ef..c0fb50f23d 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -48,8 +48,7 @@ struct GCOptions
     /* For `gcDeleteSpecific', the paths to delete. */
     PathSet pathsToDelete;
 
-    /* Stop after at least `maxFreed' bytes have been freed.  0 means
-       no limit. */
+    /* Stop after at least `maxFreed' bytes have been freed. */
     unsigned long long maxFreed;
 
     GCOptions();
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index 82e08fecf2..9a675fcd57 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -583,7 +583,7 @@ static void opGC(Strings opFlags, Strings opArgs)
         else if (*i == "--delete") options.action = GCOptions::gcDeleteDead;
         else if (*i == "--max-freed") {
             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);