* 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
				
			
		| 
						 | 
				
			
			@ -11,8 +11,6 @@ Operations:
 | 
			
		|||
  --query / -q: query information
 | 
			
		||||
  --read-log / -l: print build log of given store paths
 | 
			
		||||
 | 
			
		||||
  --register-substitutes: register a substitute expression (dangerous!)
 | 
			
		||||
  --clear-substitutes: clear all substitutes
 | 
			
		||||
  --register-validity: register path validity (dangerous!)
 | 
			
		||||
  --check-validity: check path validity
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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