Embed output name into the context of the *OutPath attributes and extract it for input derivations
Multiple outputs test passes!
This commit is contained in:
		
							parent
							
								
									46876ff203
								
							
						
					
					
						commit
						3522730316
					
				
					 1 changed files with 9 additions and 2 deletions
				
			
		|  | @ -348,6 +348,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v) | |||
|     foreach (PathSet::iterator, i, context) { | ||||
|         Path path = *i; | ||||
|         bool explicitlyPassed = false; | ||||
|         string output = "out"; | ||||
|          | ||||
|         /* Paths marked with `=' denote that the path of a derivation
 | ||||
|            is explicitly passed to the builder.  Since that allows the | ||||
|  | @ -366,6 +367,12 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v) | |||
|             } | ||||
| 
 | ||||
|             explicitlyPassed = true; | ||||
|         } else if (path.at(0) == '!') { | ||||
|             size_t index; | ||||
|             path = string(path, 1); | ||||
|             index = path.find("!"); | ||||
|             output = path.substr(0, index); | ||||
|             path = string(path, index + 1); | ||||
|         } | ||||
| 
 | ||||
|         /* See prim_unsafeDiscardOutputDependency. */ | ||||
|  | @ -382,7 +389,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v) | |||
|             if (explicitlyPassed) | ||||
|                 drv.inputDrvs[path] = store -> queryDerivationOutputNames(path); | ||||
|             else | ||||
|                 drv.inputDrvs[path] = singleton<StringSet>("out"); | ||||
|                 drv.inputDrvs[path] = singleton<StringSet>(output); | ||||
|         else | ||||
|             drv.inputSrcs.insert(path); | ||||
|     } | ||||
|  | @ -466,7 +473,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v) | |||
|         /* The output path of an output X is ‘<X>Path’,
 | ||||
|            e.g. ‘outPath’. */ | ||||
|         mkString(*state.allocAttr(v, state.symbols.create(i->first + "Path")), | ||||
|             i->second.path, singleton<PathSet>(drvPath)); | ||||
|             i->second.path, singleton<PathSet>("!" + i->first + "!" + drvPath)); | ||||
|     } | ||||
|     v.attrs->sort(); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue