mirror of
https://github.com/NixOS/nix.git
synced 2025-11-22 18:29:36 +01:00
chore: improve comments and factored out variables when moving iterator
This commit is contained in:
parent
d9c62f3f17
commit
f2587b713b
4 changed files with 18 additions and 13 deletions
|
|
@ -94,7 +94,7 @@ generations of each profile, do
|
||||||
$ nix-collect-garbage -d
|
$ nix-collect-garbage -d
|
||||||
```
|
```
|
||||||
|
|
||||||
## Keep most-recent by time (number fo days) and trim by amount
|
## Keep most-recent by time (number of days) and trim by amount
|
||||||
|
|
||||||
This command will delete generations older than a week if possible, while keeping an amount of generations between `10` and `20`.
|
This command will delete generations older than a week if possible, while keeping an amount of generations between `10` and `20`.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -135,17 +135,17 @@ void deleteGenerations(const Path & profile, const std::set<GenerationNumber> &
|
||||||
*
|
*
|
||||||
* Examples:
|
* Examples:
|
||||||
* - All parameters are nullopt
|
* - All parameters are nullopt
|
||||||
* No generations are deleted
|
* No generations are deleted.
|
||||||
* - keepMax is 5
|
* - keepMin is 5
|
||||||
* No generations are deleted
|
* No generations are deleted, only keepMax and olderThan delete generations.
|
||||||
* - keepMax is 10
|
* - keepMax is 10
|
||||||
* 10 generations after the current one are kept, the rest is deleted.
|
* 10 most recent generations after the current one are kept, the rest is deleted.
|
||||||
* - olderThan is 2025-09-16
|
* - olderThan is 2025-09-16
|
||||||
* Generations older than 2025-09-16 are deleted
|
* Generations older than 2025-09-16 are deleted.
|
||||||
* - olderThan is 2025-09-16, keepMin is 5, keepMax is 10 -
|
* - olderThan is 2025-09-16, keepMin is 5, keepMax is 10 -
|
||||||
* Will try to delete generations older than 2025-09-16.
|
* Will try to delete generations older than 2025-09-16.
|
||||||
* If there are more than 10 generations to be kept, continues to delete old generations until there is 10.
|
* If there are more than 10 generations to be kept, continues to delete old generations until there are 10.
|
||||||
* If there are less than 5 generations to be kept, preserves older generations until there is 5.
|
* If there are less than 5 generations to be kept, preserves the most recent of generations to be deleted until there are 5.
|
||||||
*
|
*
|
||||||
* @param profile The profile, specified by its name and location combined into a path, whose generations we want to
|
* @param profile The profile, specified by its name and location combined into a path, whose generations we want to
|
||||||
* delete.
|
* delete.
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,7 @@ static inline void iterDropUntil(Generations & gens, auto && i, auto && cond)
|
||||||
void deleteGenerationsFilter(const Path & profile, std::optional<time_t> olderThan, std::optional<GenerationNumber> keepMin, std::optional<GenerationNumber> keepMax, bool dryRun)
|
void deleteGenerationsFilter(const Path & profile, std::optional<time_t> olderThan, std::optional<GenerationNumber> keepMin, std::optional<GenerationNumber> keepMax, bool dryRun)
|
||||||
{
|
{
|
||||||
if (keepMin.has_value() && keepMax.has_value() && *keepMin > *keepMax)
|
if (keepMin.has_value() && keepMax.has_value() && *keepMin > *keepMax)
|
||||||
throw Error("Keep min cannot be greater than keep max");
|
throw Error("--keep-min cannot be greater than --keep-max");
|
||||||
|
|
||||||
PathLocks lock;
|
PathLocks lock;
|
||||||
lockProfile(lock, profile);
|
lockProfile(lock, profile);
|
||||||
|
|
@ -197,13 +197,18 @@ void deleteGenerationsFilter(const Path & profile, std::optional<time_t> olderTh
|
||||||
iterDropUntil(gens, older, [&](auto & g) { return g.creationTime < *olderThan; });
|
iterDropUntil(gens, older, [&](auto & g) { return g.creationTime < *olderThan; });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find first generation to delete by clamping
|
// Find first generation to delete by clamping between keepMin and keepMax
|
||||||
auto toDelete = older;
|
auto toDelete = older;
|
||||||
for (int i = std::distance(gens.rbegin(), older) - std::distance(gens.rbegin(), end); i > 0; --i)
|
|
||||||
|
auto clampBackward = std::distance(gens.rbegin(), older) - std::distance(gens.rbegin(), end);
|
||||||
|
for (int i = clampBackward; i > 0; --i)
|
||||||
--toDelete;
|
--toDelete;
|
||||||
for (int i = std::distance(gens.rbegin(), start) - std::distance(gens.rbegin(), older); i > 0; --i)
|
|
||||||
|
auto clampForward = std::distance(gens.rbegin(), start) - std::distance(gens.rbegin(), older);
|
||||||
|
for (int i = clampForward; i > 0; --i)
|
||||||
++toDelete;
|
++toDelete;
|
||||||
|
|
||||||
|
// Delete
|
||||||
for (; toDelete != gens.rend(); ++toDelete)
|
for (; toDelete != gens.rend(); ++toDelete)
|
||||||
deleteGeneration2(profile, toDelete->number, dryRun);
|
deleteGeneration2(profile, toDelete->number, dryRun);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue