* Get rid of the substitutes database table (NIX-47). Instead, if we
need any info on substitutable paths, we just call the substituters (such as download-using-manifests.pl) directly. This means that it's no longer necessary for nix-pull to register substitutes or for nix-channel to clear them, which makes those operations much faster (NIX-95). Also, we don't have to worry about keeping nix-pull manifests (in /nix/var/nix/manifests) and the database in sync with each other. The downside is that there is some overhead in calling an external program to get the substitutes info. For instance, "nix-env -qas" takes a bit longer. Abolishing the substitutes table also makes the logic in local-store.cc simpler, as we don't need to store info for invalid paths. On the downside, you cannot do things like "nix-store -qR" on a substitutable but invalid path (but nobody did that anyway). * Never catch interrupts (the Interrupted exception).
This commit is contained in:
		
							parent
							
								
									4695f4edd6
								
							
						
					
					
						commit
						9e975458b4
					
				
					 24 changed files with 357 additions and 469 deletions
				
			
		|  | @ -413,54 +413,6 @@ static void opReadLog(Strings opFlags, Strings opArgs) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| static void opRegisterSubstitutes(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     if (!opFlags.empty()) throw UsageError("unknown flag"); | ||||
|     if (!opArgs.empty()) throw UsageError("no arguments expected"); | ||||
| 
 | ||||
|     Transaction txn; | ||||
|     createStoreTransaction(txn); | ||||
| 
 | ||||
|     while (1) { | ||||
|         Path srcPath; | ||||
|         Substitute sub; | ||||
|         PathSet references; | ||||
|         getline(cin, srcPath); | ||||
|         if (cin.eof()) break; | ||||
|         getline(cin, sub.deriver); | ||||
|         getline(cin, sub.program); | ||||
|         string s; int n; | ||||
|         getline(cin, s); | ||||
|         if (!string2Int(s, n)) throw Error("number expected"); | ||||
|         while (n--) { | ||||
|             getline(cin, s); | ||||
|             sub.args.push_back(s); | ||||
|         } | ||||
|         getline(cin, s); | ||||
|         if (!string2Int(s, n)) throw Error("number expected"); | ||||
|         while (n--) { | ||||
|             getline(cin, s); | ||||
|             references.insert(s); | ||||
|         } | ||||
|         if (!cin || cin.eof()) throw Error("missing input"); | ||||
|         registerSubstitute(txn, srcPath, sub); | ||||
|         setReferences(txn, srcPath, references); | ||||
|     } | ||||
| 
 | ||||
|     txn.commit(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static void opClearSubstitutes(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     if (!opFlags.empty()) throw UsageError("unknown flag"); | ||||
|     if (!opArgs.empty()) | ||||
|         throw UsageError("no arguments expected"); | ||||
| 
 | ||||
|     clearSubstitutes(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static void opRegisterValidity(Strings opFlags, Strings opArgs) | ||||
| { | ||||
|     bool reregister = false; // !!! maybe this should be the default
 | ||||
|  | @ -475,18 +427,8 @@ static void opRegisterValidity(Strings opFlags, Strings opArgs) | |||
|     ValidPathInfos infos; | ||||
|      | ||||
|     while (1) { | ||||
|         ValidPathInfo info; | ||||
|         getline(cin, info.path); | ||||
|         if (cin.eof()) break; | ||||
|         getline(cin, info.deriver); | ||||
|         string s; int n; | ||||
|         getline(cin, s); | ||||
|         if (!string2Int(s, n)) throw Error("number expected"); | ||||
|         while (n--) { | ||||
|             getline(cin, s); | ||||
|             info.references.insert(s); | ||||
|         } | ||||
|         if (!cin || cin.eof()) throw Error("missing input"); | ||||
|         ValidPathInfo info = decodeValidPathInfo(cin); | ||||
|         if (info.path == "") break; | ||||
|         if (!store->isValidPath(info.path) || reregister) { | ||||
|             /* !!! races */ | ||||
|             canonicalisePathMetaData(info.path); | ||||
|  | @ -699,10 +641,6 @@ void run(Strings args) | |||
|             op = opQuery; | ||||
|         else if (arg == "--read-log" || arg == "-l") | ||||
|             op = opReadLog; | ||||
|         else if (arg == "--register-substitutes") | ||||
|             op = opRegisterSubstitutes; | ||||
|         else if (arg == "--clear-substitutes") | ||||
|             op = opClearSubstitutes; | ||||
|         else if (arg == "--register-validity") | ||||
|             op = opRegisterValidity; | ||||
|         else if (arg == "--check-validity") | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue