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) { |     foreach (PathSet::iterator, i, context) { | ||||||
|         Path path = *i; |         Path path = *i; | ||||||
|         bool explicitlyPassed = false; |         bool explicitlyPassed = false; | ||||||
|  |         string output = "out"; | ||||||
|          |          | ||||||
|         /* Paths marked with `=' denote that the path of a derivation
 |         /* Paths marked with `=' denote that the path of a derivation
 | ||||||
|            is explicitly passed to the builder.  Since that allows the |            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; |             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. */ |         /* See prim_unsafeDiscardOutputDependency. */ | ||||||
|  | @ -382,7 +389,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v) | ||||||
|             if (explicitlyPassed) |             if (explicitlyPassed) | ||||||
|                 drv.inputDrvs[path] = store -> queryDerivationOutputNames(path); |                 drv.inputDrvs[path] = store -> queryDerivationOutputNames(path); | ||||||
|             else |             else | ||||||
|                 drv.inputDrvs[path] = singleton<StringSet>("out"); |                 drv.inputDrvs[path] = singleton<StringSet>(output); | ||||||
|         else |         else | ||||||
|             drv.inputSrcs.insert(path); |             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’,
 |         /* The output path of an output X is ‘<X>Path’,
 | ||||||
|            e.g. ‘outPath’. */ |            e.g. ‘outPath’. */ | ||||||
|         mkString(*state.allocAttr(v, state.symbols.create(i->first + "Path")), |         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(); |     v.attrs->sort(); | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue