Add information about which output is active to drvPath's context

This will break things that depend on being able to just strip away an equals sign, so those have to be updated next
This commit is contained in:
Shea Levy 2011-09-16 11:30:52 +00:00
parent ffa038f66d
commit bf50d6ad32
1 changed files with 6 additions and 4 deletions

View File

@ -455,8 +455,8 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v)
drvHashes[drvPath] = hashDerivationModulo(*store, drv);
state.mkAttrs(v, 1 + drv.outputs.size());
mkString(*state.allocAttr(v, state.sDrvPath), drvPath, singleton<PathSet>("=" + drvPath));
foreach (DerivationOutputs::iterator, i, drv.outputs) {
mkString(*state.allocAttr(v, state.symbols.create(i->first + "DrvPath")), drvPath, singleton<PathSet>("=" + i->first + "=" + drvPath));
/* The output path of an output X is <X>Path,
e.g. outPath. */
mkString(*state.allocAttr(v, state.symbols.create(i->first + "Path")),
@ -1111,11 +1111,13 @@ void EvalState::createBaseEnv()
attrValues = attrs: \
map (name: builtins.getAttr name attrs) (builtins.attrNames attrs); \
outputToAttrListElement = output: \
let outPath = builtins.getAttr (output + \"Path\") strict; in { \
let \
outPath = builtins.getAttr (output + \"Path\") strict; \
drvPath = builtins.getAttr (output + \"DrvPath\") strict; \
in { \
name = output; \
value = attrs // { \
drvPath = strict.drvPath; \
inherit outPath; \
inherit outPath drvPath; \
type = \"derivation\"; \
currentOutput = output; \
} // outputsAttrs // { all = allList; }; \