optimiseStore(): Use a content-addressed file store in /nix/store/.links
optimiseStore() now creates persistent, content-addressed hard links in /nix/store/.links. For instance, if it encounters a file P with hash H, it will create a hard link P' = /nix/store/.link/<H> to P if P' doesn't already exist; if P' exist, then P is replaced by a hard link to P'. This is better than the previous in-memory map, because it had the tendency to unnecessarily replace hard links with a hard link to whatever happened to be the first file with a given hash it encountered. It also allows on-the-fly, incremental optimisation.
This commit is contained in:
		
							parent
							
								
									ed59bf7a18
								
							
						
					
					
						commit
						564fb7d9fa
					
				
					 3 changed files with 109 additions and 114 deletions
				
			
		|  | @ -746,18 +746,12 @@ static void showOptimiseStats(OptimiseStats & stats) | |||
|    files with the same contents. */ | ||||
| static void opOptimise(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     if (!opArgs.empty()) | ||||
|     if (!opArgs.empty() || !opFlags.empty()) | ||||
|         throw UsageError("no arguments expected"); | ||||
| 
 | ||||
|     bool dryRun = false; | ||||
| 
 | ||||
|     foreach (Strings::iterator, i, opFlags) | ||||
|         if (*i == "--dry-run") dryRun = true; | ||||
|         else throw UsageError(format("unknown flag `%1%'") % *i); | ||||
| 
 | ||||
|     OptimiseStats stats; | ||||
|     try { | ||||
|         ensureLocalStore().optimiseStore(dryRun, stats); | ||||
|         ensureLocalStore().optimiseStore(stats); | ||||
|     } catch (...) { | ||||
|         showOptimiseStats(stats); | ||||
|         throw; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue