aboutsummaryrefslogtreecommitdiff
path: root/src/nix-store
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-store')
-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 7bc8565d2..e9948c7cf 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)