From bf50d6ad3271aaa6ac93b68e99f5acb1d9a158c7 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Fri, 16 Sep 2011 11:30:52 +0000 Subject: [PATCH] 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 --- src/libexpr/primops.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 121dbca9b..a752b9a59 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -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("=" + drvPath)); foreach (DerivationOutputs::iterator, i, drv.outputs) { + mkString(*state.allocAttr(v, state.symbols.create(i->first + "DrvPath")), drvPath, singleton("=" + i->first + "=" + drvPath)); /* The output path of an output X is ‘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; }; \