1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-30 11:43:15 +02:00

Move call-flake.nix into libexpr

This commit is contained in:
Eelco Dolstra 2020-03-11 16:34:46 +01:00
parent 35f6651735
commit e188fe7c6d
5 changed files with 13 additions and 5 deletions

View file

@ -0,0 +1,22 @@
locks: rootSrc: rootSubdir:
let
callFlake = sourceInfo: subdir: locks:
let
flake = import (sourceInfo + "/" + subdir + "/flake.nix");
inputs = builtins.mapAttrs (n: v:
if v.flake or true
then callFlake (fetchTree (removeAttrs v.locked ["dir"])) (v.locked.dir or "") v.inputs
else fetchTree v.locked) locks;
outputs = flake.outputs (inputs // { self = result; });
result = outputs // sourceInfo // { inherit inputs; inherit outputs; inherit sourceInfo; };
in
assert flake.edition == 201909;
result;
in callFlake rootSrc rootSubdir (builtins.fromJSON locks).inputs

View file

@ -623,7 +623,6 @@ void callFlake(EvalState & state,
const LockedInputs & lockedInputs,
Value & vRes)
{
auto vCallFlake = state.allocValue();
auto vLocks = state.allocValue();
auto vRootSrc = state.allocValue();
auto vRootSubdir = state.allocValue();
@ -636,7 +635,15 @@ void callFlake(EvalState & state,
mkString(*vRootSubdir, flake.lockedRef.subdir);
state.evalFile(canonPath(settings.nixDataDir + "/nix/corepkgs/call-flake.nix", true), *vCallFlake);
static Value * vCallFlake = nullptr;
if (!vCallFlake) {
vCallFlake = state.allocValue();
state.eval(state.parseExprFromString(
#include "call-flake.nix.gen.hh"
, "/"), *vCallFlake);
}
state.callFunction(*vCallFlake, *vLocks, *vTmp1, noPos);
state.callFunction(*vTmp1, *vRootSrc, *vTmp2, noPos);
state.callFunction(*vTmp2, *vRootSubdir, vRes, noPos);

View file

@ -41,3 +41,5 @@ $(foreach i, $(wildcard src/libexpr/flake/*.hh), \
$(eval $(call install-file-in, $(i), $(includedir)/nix/flake, 0644)))
$(d)/primops.cc: $(d)/imported-drv-to-derivation.nix.gen.hh
$(d)/flake/flake.cc: $(d)/flake/call-flake.nix.gen.hh