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…
	
	Add table
		Add a link
		
	
		Reference in a new issue