only delete things older than current gen and update logic in doc as
well
This commit is contained in:
parent
3c16044cb0
commit
467fdd8ca4
2 changed files with 14 additions and 9 deletions
|
@ -1349,9 +1349,9 @@ special value <literal>old</literal> to delete all non-current
|
||||||
generations, a value such as <literal>30d</literal> to delete all
|
generations, a value such as <literal>30d</literal> to delete all
|
||||||
generations older than the specified number of days (except for the
|
generations older than the specified number of days (except for the
|
||||||
generation that was active at that point in time), or a value such as.
|
generation that was active at that point in time), or a value such as.
|
||||||
<literal>+5</literal> to delete all but the number of items specified.
|
<literal>+5</literal> to only keep the specified items older than the
|
||||||
Periodically deleting old generations is important to make garbage
|
current generation. Periodically deleting old generations is important
|
||||||
collection effective.</para>
|
to make garbage collection effective.</para>
|
||||||
|
|
||||||
</refsection>
|
</refsection>
|
||||||
|
|
||||||
|
@ -1461,7 +1461,7 @@ error: no generation older than the current (91) exists</screen>
|
||||||
<refsection condition="manpage"><title>Environment variables</title>
|
<refsection condition="manpage"><title>Environment variables</title>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
|
|
||||||
<varlistentry><term><envar>NIX_PROFILE</envar></term>
|
<varlistentry><term><envar>NIX_PROFILE</envar></term>
|
||||||
|
|
||||||
<listitem><para>Location of the Nix profile. Defaults to the
|
<listitem><para>Location of the Nix profile. Defaults to the
|
||||||
|
@ -1475,6 +1475,6 @@ error: no generation older than the current (91) exists</screen>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
</refsection>
|
</refsection>
|
||||||
|
|
||||||
|
|
||||||
</refentry>
|
</refentry>
|
||||||
|
|
|
@ -160,19 +160,24 @@ void deleteGenerations(const Path & profile, const std::set<unsigned int> & gens
|
||||||
void deleteGenerationsGreaterThan(const Path & profile, int max, bool dryRun)
|
void deleteGenerationsGreaterThan(const Path & profile, int max, bool dryRun)
|
||||||
{
|
{
|
||||||
PathLocks lock;
|
PathLocks lock;
|
||||||
|
|
||||||
lockProfile(lock, profile);
|
lockProfile(lock, profile);
|
||||||
|
|
||||||
int curGen;
|
int curGen;
|
||||||
|
bool fromCurGen = false;
|
||||||
Generations gens = findGenerations(profile, curGen);
|
Generations gens = findGenerations(profile, curGen);
|
||||||
|
|
||||||
for (auto i = gens.rbegin(); i != gens.rend(); ++i) {
|
for (auto i = gens.rbegin(); i != gens.rend(); ++i) {
|
||||||
if (max) {
|
if (i->number == curGen) {
|
||||||
|
fromCurGen = true;
|
||||||
max--;
|
max--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (i->number != curGen)
|
if (fromCurGen) {
|
||||||
|
if (max) {
|
||||||
|
max--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
deleteGeneration2(profile, i->number, dryRun);
|
deleteGeneration2(profile, i->number, dryRun);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue