nix-env: Determine which paths have substitutes in parallel
This commit is contained in:
		
							parent
							
								
									5ee8944155
								
							
						
					
					
						commit
						6586414bc7
					
				
					 2 changed files with 24 additions and 2 deletions
				
			
		|  | @ -33,6 +33,8 @@ private: | |||
|     bool metaInfoRead; | ||||
|     MetaInfo meta; | ||||
| 
 | ||||
|     bool failed; // set if we get an AssertionError
 | ||||
|      | ||||
| public: | ||||
|     string name; | ||||
|     string attrPath; /* path towards the derivation */ | ||||
|  | @ -41,7 +43,7 @@ public: | |||
|     /* !!! make this private */ | ||||
|     Bindings * attrs; | ||||
| 
 | ||||
|     DrvInfo() : metaInfoRead(false), attrs(0) { }; | ||||
|     DrvInfo() : metaInfoRead(false), failed(false), attrs(0) { }; | ||||
| 
 | ||||
|     string queryDrvPath(EvalState & state) const; | ||||
|     string queryOutPath(EvalState & state) const; | ||||
|  | @ -59,6 +61,9 @@ public: | |||
|     } | ||||
| 
 | ||||
|     void setMetaInfo(const MetaInfo & meta); | ||||
| 
 | ||||
|     void setFailed() { failed = true; }; | ||||
|     bool hasFailed() { return failed; }; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -930,6 +930,21 @@ static void opQuery(Globals & globals, | |||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /* Query which paths have substitutes. */ | ||||
|     SubstitutablePathInfos subs; | ||||
|     if (printStatus) { | ||||
|         PathSet paths; | ||||
|         foreach (vector<DrvInfo>::iterator, i, elems2) | ||||
|             try { | ||||
|                 paths.insert(i->queryOutPath(globals.state)); | ||||
|             } catch (AssertionError & e) { | ||||
|                 printMsg(lvlTalkative, format("skipping derivation named `%1%' which gives an assertion failure") % i->name); | ||||
|                 i->setFailed(); | ||||
|             } | ||||
|         store->querySubstitutablePathInfos(paths, subs); | ||||
|     } | ||||
| 
 | ||||
|      | ||||
|     /* Print the desired columns, or XML output. */ | ||||
|     Table table; | ||||
|     std::ostringstream dummy; | ||||
|  | @ -938,6 +953,8 @@ static void opQuery(Globals & globals, | |||
|      | ||||
|     foreach (vector<DrvInfo>::iterator, i, elems2) { | ||||
|         try { | ||||
|             if (i->hasFailed()) continue; | ||||
|              | ||||
|             startNest(nest, lvlDebug, format("outputting query result `%1%'") % i->attrPath); | ||||
| 
 | ||||
|             if (globals.prebuiltOnly && !isPrebuilt(globals.state, *i)) continue; | ||||
|  | @ -949,7 +966,7 @@ static void opQuery(Globals & globals, | |||
|             XMLAttrs attrs; | ||||
| 
 | ||||
|             if (printStatus) { | ||||
|                 bool hasSubs = store->hasSubstitutes(i->queryOutPath(globals.state)); | ||||
|                 bool hasSubs = subs.find(i->queryOutPath(globals.state)) != subs.end(); | ||||
|                 bool isInstalled = installed.find(i->queryOutPath(globals.state)) != installed.end(); | ||||
|                 bool isValid = store->isValidPath(i->queryOutPath(globals.state)); | ||||
|                 if (xmlOutput) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue