aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-03-10 19:21:47 +0100
committerEelco Dolstra <edolstra@gmail.com>2020-03-10 19:21:47 +0100
commitcfc38257cfcdabd34151d723906b38873e7ef6d0 (patch)
tree2fc91beee53e6818a0b357e59a789dc3c69dd831 /src/libexpr
parent73769b28e376cf1fb3e7248bafaa17c35527925d (diff)
Fix flake subdirectory handling
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/flake/flake.cc11
-rw-r--r--src/libexpr/primops/fetchTree.cc1
2 files changed, 9 insertions, 3 deletions
diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc
index eac7d026d..9d8a5f950 100644
--- a/src/libexpr/flake/flake.cc
+++ b/src/libexpr/flake/flake.cc
@@ -626,15 +626,20 @@ void callFlake(EvalState & state,
auto vCallFlake = state.allocValue();
auto vLocks = state.allocValue();
auto vRootSrc = state.allocValue();
- auto vTmp = state.allocValue();
+ auto vRootSubdir = state.allocValue();
+ auto vTmp1 = state.allocValue();
+ auto vTmp2 = state.allocValue();
mkString(*vLocks, lockedInputs.to_string());
emitTreeAttrs(state, *flake.sourceInfo, flake.lockedRef.input, *vRootSrc);
+ mkString(*vRootSubdir, flake.lockedRef.subdir);
+
state.evalFile(canonPath(settings.nixDataDir + "/nix/corepkgs/call-flake.nix", true), *vCallFlake);
- state.callFunction(*vCallFlake, *vLocks, *vTmp, noPos);
- state.callFunction(*vTmp, *vRootSrc, vRes, noPos);
+ state.callFunction(*vCallFlake, *vLocks, *vTmp1, noPos);
+ state.callFunction(*vTmp1, *vRootSrc, *vTmp2, noPos);
+ state.callFunction(*vTmp2, *vRootSubdir, vRes, noPos);
}
void callFlake(EvalState & state,
diff --git a/src/libexpr/primops/fetchTree.cc b/src/libexpr/primops/fetchTree.cc
index 66994c823..47667a1b8 100644
--- a/src/libexpr/primops/fetchTree.cc
+++ b/src/libexpr/primops/fetchTree.cc
@@ -76,6 +76,7 @@ static void prim_fetchTree(EvalState & state, const Pos & pos, Value * * args, V
if (evalSettings.pureEval && !input->isImmutable())
throw Error("in pure evaluation mode, 'fetchTree' requires an immutable input");
+ // FIXME: use fetchOrSubstituteTree
auto [tree, input2] = input->fetchTree(state.store);
if (state.allowedPaths)