about summary refs log tree commit diff
path: root/src/nix-store/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-store/main.cc')
-rw-r--r--src/nix-store/main.cc25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/nix-store/main.cc b/src/nix-store/main.cc
index 7bc8565d293d..e9948c7cf8ac 100644
--- a/src/nix-store/main.cc
+++ b/src/nix-store/main.cc
@@ -212,17 +212,22 @@ static void opIsValid(Strings opFlags, Strings opArgs)
 
 static void opGC(Strings opFlags, Strings opArgs)
 {
-    if (opFlags.size() != 1) throw UsageError("missing flag");
-    if (!opArgs.empty())
-        throw UsageError("no arguments expected");
-
     /* Do what? */
-    string flag = opFlags.front();
     enum { soPrintLive, soPrintDead, soDelete } subOp;
-    if (flag == "--print-live") subOp = soPrintLive;
-    else if (flag == "--print-dead") subOp = soPrintDead;
-    else if (flag == "--delete") subOp = soDelete;
-    else throw UsageError(format("bad sub-operation `%1%' in GC") % flag);
+    time_t minAge = 0;
+    for (Strings::iterator i = opFlags.begin();
+         i != opFlags.end(); ++i)
+        if (*i == "--print-live") subOp = soPrintLive;
+        else if (*i == "--print-dead") subOp = soPrintDead;
+        else if (*i == "--delete") subOp = soDelete;
+        else if (*i == "--min-age") {
+            if (opArgs.size() == 0)
+                throw UsageError("`--min-age' requires an argument");
+            istringstream st(opArgs.front());
+            st >> minAge;
+            if (!st) throw Error("number expected");
+        }
+        else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
         
     Paths roots;
     while (1) {
@@ -240,7 +245,7 @@ static void opGC(Strings opFlags, Strings opArgs)
         return;
     }
 
-    PathSet dead = findDeadPaths(live);
+    PathSet dead = findDeadPaths(live, minAge * 3600);
 
     if (subOp == soPrintDead) {
         for (PathSet::iterator i = dead.begin(); i != dead.end(); ++i)