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