* Revived the old "nix-store --delete" operation that deletes the
specified paths from the Nix store. However, this operation is safe: it refuses to delete anything that the garbage collector wouldn't delete.
This commit is contained in:
		
							parent
							
								
									3c5619c7e4
								
							
						
					
					
						commit
						4b9e7f59ca
					
				
					 4 changed files with 45 additions and 11 deletions
				
			
		|  | @ -7,6 +7,7 @@ Operations: | |||
|   --realise / -r: ensure path validity; if a derivation, ensure that | ||||
|       validity of the outputs | ||||
|   --add / -A: copy a path to the Nix store | ||||
|   --delete: safely delete paths from the Nix store | ||||
|   --query / -q: query information | ||||
| 
 | ||||
|   --register-substitutes: register a substitute expression (dangerous!) | ||||
|  |  | |||
|  | @ -518,7 +518,7 @@ static void opGC(Strings opFlags, Strings opArgs) | |||
| 
 | ||||
|     PathSet result; | ||||
|     PrintFreed freed(action == gcDeleteDead); | ||||
|     collectGarbage(action, result, freed.bytesFreed); | ||||
|     collectGarbage(action, PathSet(), result, freed.bytesFreed); | ||||
| 
 | ||||
|     if (action != gcDeleteDead) { | ||||
|         for (PathSet::iterator i = result.begin(); i != result.end(); ++i) | ||||
|  | @ -527,6 +527,25 @@ static void opGC(Strings opFlags, Strings opArgs) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Remove paths from the Nix store if possible (i.e., if they do not
 | ||||
|    have any remaining referrers and are not reachable from any GC | ||||
|    roots). */ | ||||
| static void opDelete(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     if (!opFlags.empty()) throw UsageError("unknown flag"); | ||||
| 
 | ||||
|     PathSet pathsToDelete; | ||||
|     for (Strings::iterator i = opArgs.begin(); | ||||
|          i != opArgs.end(); ++i) | ||||
|         pathsToDelete.insert(fixPath(*i)); | ||||
|      | ||||
|     PathSet dummy; | ||||
|     PrintFreed freed(true); | ||||
|     collectGarbage(gcDeleteSpecific, pathsToDelete, | ||||
|         dummy, freed.bytesFreed); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* A sink that writes dump output to stdout. */ | ||||
| struct StdoutSink : DumpSink | ||||
| { | ||||
|  | @ -621,6 +640,8 @@ void run(Strings args) | |||
|             op = opAddFixed; | ||||
|         else if (arg == "--print-fixed-path") | ||||
|             op = opPrintFixedPath; | ||||
|         else if (arg == "--delete") | ||||
|             op = opDelete; | ||||
|         else if (arg == "--query" || arg == "-q") | ||||
|             op = opQuery; | ||||
|         else if (arg == "--register-substitutes") | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue