From 7ef7597f71b282265a9f79afe4608cd3b1bc4127 Mon Sep 17 00:00:00 2001 From: "Ricardo M. Correia" Date: Tue, 11 Mar 2014 21:47:21 +0100 Subject: nix-env: Add support for --delete-generations 15d It will delete all generations older than the specified number of days. --- src/nix-env/nix-env.cc | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc index 333a7fe8c..8a8052634 100644 --- a/src/nix-env/nix-env.cc +++ b/src/nix-env/nix-env.cc @@ -1304,9 +1304,24 @@ static void opDeleteGenerations(Globals & globals, for (Generations::iterator j = gens.begin(); j != gens.end(); ++j) if (j->number != curGen) deleteGeneration2(globals, j->number); - } + } else if (i->size() >= 2 && tolower(*i->rbegin()) == 'd') { + time_t curTime = time(NULL); + time_t oldTime; + string strDays = string(*i, 0, i->size() - 1); + int days; - else { + if (!string2Int(strDays, days) || days < 1) + throw UsageError(format("invalid number of days specifier `%1%'") % *i); + + oldTime = curTime - days * 24 * 3600; + + for (Generations::iterator j = gens.begin(); j != gens.end(); ++j) { + if (j->number == curGen) continue; + + if (j->creationTime < oldTime) + deleteGeneration2(globals, j->number); + } + } else { int n; if (!string2Int(*i, n) || n < 0) throw UsageError(format("invalid generation specifier `%1%'") % *i); -- cgit v1.2.3