* `nix-store --add-fixed' to preload the outputs of fixed-output
derivations.  This is mostly to simplify the implementation of
  nix-prefetch-{url, svn}, which now work properly in setuid
  installations.
* Enforce valid store names in `nix-store --add / --add-fixed'.
			
			
This commit is contained in:
		
							parent
							
								
									57d023a184
								
							
						
					
					
						commit
						c815aff21b
					
				
					 7 changed files with 152 additions and 57 deletions
				
			
		|  | @ -85,8 +85,7 @@ static void opRealise(Strings opFlags, Strings opArgs) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Add files to the Nix values directory and print the resulting
 | ||||
|    paths. */ | ||||
| /* Add files to the Nix store and print the resulting paths. */ | ||||
| static void opAdd(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     if (!opFlags.empty()) throw UsageError("unknown flag"); | ||||
|  | @ -96,6 +95,49 @@ static void opAdd(Strings opFlags, Strings opArgs) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Preload the output of a fixed-output derivation into the Nix
 | ||||
|    store. */ | ||||
| static void opAddFixed(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     bool recursive = false; | ||||
|      | ||||
|     for (Strings::iterator i = opFlags.begin(); | ||||
|          i != opFlags.end(); ++i) | ||||
|         if (*i == "--recursive") recursive = true; | ||||
|         else throw UsageError(format("unknown flag `%1%'") % *i); | ||||
| 
 | ||||
|     if (opArgs.empty()) | ||||
|         throw UsageError("first argument must be hash algorithm"); | ||||
|      | ||||
|     string hashAlgo = opArgs.front(); | ||||
|     opArgs.pop_front(); | ||||
| 
 | ||||
|     for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); ++i) | ||||
|         cout << format("%1%\n") % addToStoreFixed(recursive, hashAlgo, *i); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Hack to support caching in `nix-prefetch-url'. */ | ||||
| static void opPrintFixedPath(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     bool recursive = false; | ||||
|      | ||||
|     for (Strings::iterator i = opFlags.begin(); | ||||
|          i != opFlags.end(); ++i) | ||||
|         if (*i == "--recursive") recursive = true; | ||||
|         else throw UsageError(format("unknown flag `%1%'") % *i); | ||||
| 
 | ||||
|     Strings::iterator i = opArgs.begin(); | ||||
|     string hashAlgo = *i++; | ||||
|     string hash = *i++; | ||||
|     string name = *i++; | ||||
| 
 | ||||
|     cout << format("%1%\n") % | ||||
|         makeFixedOutputPath(recursive, hashAlgo, | ||||
|             parseHash(parseHashType(hashAlgo), hash), name); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Place in `paths' the set of paths that are required to `realise'
 | ||||
|    the given store path, i.e., all paths necessary for valid | ||||
|    deployment of the path.  For a derivation, this is the union of | ||||
|  | @ -557,6 +599,10 @@ void run(Strings args) | |||
|             op = opRealise; | ||||
|         else if (arg == "--add" || arg == "-A") | ||||
|             op = opAdd; | ||||
|         else if (arg == "--add-fixed") | ||||
|             op = opAddFixed; | ||||
|         else if (arg == "--print-fixed-path") | ||||
|             op = opPrintFixedPath; | ||||
|         else if (arg == "--query" || arg == "-q") | ||||
|             op = opQuery; | ||||
|         else if (arg == "--substitute") | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue