forked from lix-project/lix
Fix flake subdirectory handling
This commit is contained in:
parent
73769b28e3
commit
cfc38257cf
|
@ -1,14 +1,14 @@
|
||||||
locks: rootSrc:
|
locks: rootSrc: rootSubdir:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
callFlake = sourceInfo: locks:
|
callFlake = sourceInfo: subdir: locks:
|
||||||
let
|
let
|
||||||
flake = import (sourceInfo + "/flake.nix");
|
flake = import (sourceInfo + "/" + subdir + "/flake.nix");
|
||||||
|
|
||||||
inputs = builtins.mapAttrs (n: v:
|
inputs = builtins.mapAttrs (n: v:
|
||||||
if v.flake or true
|
if v.flake or true
|
||||||
then callFlake (fetchTree v.locked) v.inputs
|
then callFlake (fetchTree (removeAttrs v.locked ["dir"])) (v.locked.dir or "") v.inputs
|
||||||
else fetchTree v.locked) locks;
|
else fetchTree v.locked) locks;
|
||||||
|
|
||||||
outputs = flake.outputs (inputs // { self = result; });
|
outputs = flake.outputs (inputs // { self = result; });
|
||||||
|
@ -19,4 +19,4 @@ let
|
||||||
|
|
||||||
result;
|
result;
|
||||||
|
|
||||||
in callFlake rootSrc (builtins.fromJSON locks).inputs
|
in callFlake rootSrc rootSubdir (builtins.fromJSON locks).inputs
|
||||||
|
|
|
@ -626,15 +626,20 @@ void callFlake(EvalState & state,
|
||||||
auto vCallFlake = state.allocValue();
|
auto vCallFlake = state.allocValue();
|
||||||
auto vLocks = state.allocValue();
|
auto vLocks = state.allocValue();
|
||||||
auto vRootSrc = 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());
|
mkString(*vLocks, lockedInputs.to_string());
|
||||||
|
|
||||||
emitTreeAttrs(state, *flake.sourceInfo, flake.lockedRef.input, *vRootSrc);
|
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.evalFile(canonPath(settings.nixDataDir + "/nix/corepkgs/call-flake.nix", true), *vCallFlake);
|
||||||
state.callFunction(*vCallFlake, *vLocks, *vTmp, noPos);
|
state.callFunction(*vCallFlake, *vLocks, *vTmp1, noPos);
|
||||||
state.callFunction(*vTmp, *vRootSrc, vRes, noPos);
|
state.callFunction(*vTmp1, *vRootSrc, *vTmp2, noPos);
|
||||||
|
state.callFunction(*vTmp2, *vRootSubdir, vRes, noPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void callFlake(EvalState & state,
|
void callFlake(EvalState & state,
|
||||||
|
|
|
@ -76,6 +76,7 @@ static void prim_fetchTree(EvalState & state, const Pos & pos, Value * * args, V
|
||||||
if (evalSettings.pureEval && !input->isImmutable())
|
if (evalSettings.pureEval && !input->isImmutable())
|
||||||
throw Error("in pure evaluation mode, 'fetchTree' requires an immutable input");
|
throw Error("in pure evaluation mode, 'fetchTree' requires an immutable input");
|
||||||
|
|
||||||
|
// FIXME: use fetchOrSubstituteTree
|
||||||
auto [tree, input2] = input->fetchTree(state.store);
|
auto [tree, input2] = input->fetchTree(state.store);
|
||||||
|
|
||||||
if (state.allowedPaths)
|
if (state.allowedPaths)
|
||||||
|
|
Loading…
Reference in a new issue