mirror of
https://github.com/NixOS/nix
synced 2025-06-25 06:31:14 +02:00
nix-env: Minor change to '--delete-generations Nd' semantics
The option '--delete-generations Nd' deletes all generations older than N days. However, most likely the user does not want to delete the generation that was active N days ago. For example, say that you have these 3 generations: 1: <30 days ago> 2: <15 days ago> 3: <1 hour ago> If you do --delete-generations 7d (say, as part of a cron job), most likely you still want to keep generation 2, i.e. the generation that was active 7 days ago (and for most of the past 7 days, in fact). This patch fixes this issue. Note that this also affects 'nix-collect-garbage --delete-older-than Nd'. Thanks to @roconnor for noticing the issue!
This commit is contained in:
parent
fb5d76b89e
commit
700c678c2e
3 changed files with 15 additions and 7 deletions
|
@ -1315,11 +1315,17 @@ static void opDeleteGenerations(Globals & globals,
|
|||
|
||||
oldTime = curTime - days * 24 * 3600;
|
||||
|
||||
for (Generations::iterator j = gens.begin(); j != gens.end(); ++j) {
|
||||
if (j->number == curGen) continue;
|
||||
|
||||
if (j->creationTime < oldTime)
|
||||
bool canDelete = false;
|
||||
for (Generations::reverse_iterator j = gens.rbegin(); j != gens.rend(); ++j) {
|
||||
if (canDelete) {
|
||||
assert(j->creationTime < oldTime);
|
||||
deleteGeneration2(globals, j->number);
|
||||
} else if (j->creationTime < oldTime) {
|
||||
/* We may now start deleting generations, but we don't delete
|
||||
this generation yet, because this generation was still the
|
||||
one that was active at the requested point in time. */
|
||||
canDelete = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int n;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue