nix-env: Add support for --delete-generations 15d
It will delete all generations older than the specified number of days.
This commit is contained in:
parent
59c9019685
commit
7ef7597f71
2 changed files with 24 additions and 5 deletions
|
@ -1167,10 +1167,12 @@ $ nix-env --list-generations
|
||||||
<refsection><title>Description</title>
|
<refsection><title>Description</title>
|
||||||
|
|
||||||
<para>This operation deletes the specified generations of the current
|
<para>This operation deletes the specified generations of the current
|
||||||
profile. The generations can be a list of generation numbers, or the
|
profile. The generations can be a list of generation numbers, the
|
||||||
special value <literal>old</literal> to delete all non-current
|
special value <literal>old</literal> to delete all non-current
|
||||||
generations. Periodically deleting old generations is important to
|
generations, or a value such as <literal>30d</literal> to delete all
|
||||||
make garbage collection effective.</para>
|
non-current generations older than the specified number of days.
|
||||||
|
Periodically deleting old generations is important to make garbage
|
||||||
|
collection effective.</para>
|
||||||
|
|
||||||
</refsection>
|
</refsection>
|
||||||
|
|
||||||
|
@ -1179,6 +1181,8 @@ make garbage collection effective.</para>
|
||||||
<screen>
|
<screen>
|
||||||
$ nix-env --delete-generations 3 4 8
|
$ nix-env --delete-generations 3 4 8
|
||||||
|
|
||||||
|
$ nix-env --delete-generations 30d
|
||||||
|
|
||||||
$ nix-env -p other_profile --delete-generations old</screen>
|
$ nix-env -p other_profile --delete-generations old</screen>
|
||||||
|
|
||||||
</refsection>
|
</refsection>
|
||||||
|
|
|
@ -1304,9 +1304,24 @@ static void opDeleteGenerations(Globals & globals,
|
||||||
for (Generations::iterator j = gens.begin(); j != gens.end(); ++j)
|
for (Generations::iterator j = gens.begin(); j != gens.end(); ++j)
|
||||||
if (j->number != curGen)
|
if (j->number != curGen)
|
||||||
deleteGeneration2(globals, j->number);
|
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;
|
int n;
|
||||||
if (!string2Int(*i, n) || n < 0)
|
if (!string2Int(*i, n) || n < 0)
|
||||||
throw UsageError(format("invalid generation specifier `%1%'") % *i);
|
throw UsageError(format("invalid generation specifier `%1%'") % *i);
|
||||||
|
|
Loading…
Reference in a new issue