diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2020-03-10 19:21:47 +0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2020-03-10 19:21:47 +0100 |
commit | cfc38257cfcdabd34151d723906b38873e7ef6d0 (patch) | |
tree | 2fc91beee53e6818a0b357e59a789dc3c69dd831 /src/libexpr | |
parent | 73769b28e376cf1fb3e7248bafaa17c35527925d (diff) |
Fix flake subdirectory handling
Diffstat (limited to 'src/libexpr')
-rw-r--r-- | src/libexpr/flake/flake.cc | 11 | ||||
-rw-r--r-- | src/libexpr/primops/fetchTree.cc | 1 |
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) |