Merge pull request #167947 from MatthewCroughan/mc/callLocklessFlake

lib: add callLocklessFlake
main
Artturi 2 years ago committed by GitHub
commit a5357d06e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      lib/default.nix
  2. 22
      lib/flakes.nix
  3. 8
      lib/tests/flakes/subflakeTest/flake.nix
  4. 5
      lib/tests/flakes/subflakeTest/subflake/flake.nix
  5. 9
      lib/tests/misc.nix

@ -11,6 +11,9 @@ let
callLibs = file: import file { lib = self; };
in {
# interacting with flakes
flakes = callLibs ./flakes.nix;
# often used, or depending on very little
trivial = callLibs ./trivial.nix;
fixedPoints = callLibs ./fixed-points.nix;
@ -59,6 +62,7 @@ let
# linux kernel configuration
kernel = callLibs ./kernel.nix;
inherit (self.flakes) callLocklessFlake;
inherit (builtins) add addErrorContext attrNames concatLists
deepSeq elem elemAt filter genericClosure genList getAttr
hasAttr head isAttrs isBool isInt isList isString length

@ -0,0 +1,22 @@
{ lib }:
rec {
/* imports a flake.nix without acknowledging its lock file, useful for
referencing subflakes from a parent flake. The second argument allows
specifying the inputs of this flake.
Example:
callLocklessFlake {
path = ./directoryContainingFlake;
inputs = { inherit nixpkgs; };
}
*/
callLocklessFlake = { path, inputs ? { } }:
let
self = { outPath = path; } //
((import (path + "/flake.nix")).outputs (inputs // { self = self; }));
in
self;
}

@ -0,0 +1,8 @@
{
outputs = { self, subflake, callLocklessFlake }: rec {
x = (callLocklessFlake {
path = subflake;
inputs = {};
}).subflakeOutput;
};
}

@ -0,0 +1,5 @@
{
outputs = { self }: {
subflakeOutput = 1;
};
}

@ -22,6 +22,15 @@ in
runTests {
# FLAKES
testCallLocklessFlake = {
expr = callLocklessFlake {
path = ./flakes/subflakeTest;
inputs = { subflake = ./flakes/subflakeTest/subflake; inherit callLocklessFlake; };
};
expected = { x = 1; outPath = ./flakes/subflakeTest; };
};
# TRIVIAL

Loading…
Cancel
Save