aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/flake/call-flake.nix22
-rw-r--r--tests/flakes/inputs.sh1
2 files changed, 18 insertions, 5 deletions
diff --git a/src/libexpr/flake/call-flake.nix b/src/libexpr/flake/call-flake.nix
index 7dc03e7f5..4beb0b0fe 100644
--- a/src/libexpr/flake/call-flake.nix
+++ b/src/libexpr/flake/call-flake.nix
@@ -9,16 +9,14 @@ let
(key: node:
let
- rawSourceInfo =
+ sourceInfo =
if key == lockFile.root
then rootSrc
else fetchTree (node.info or {} // removeAttrs node.locked ["dir"]);
subdir = if key == lockFile.root then rootSubdir else node.locked.dir or "";
- outPath = rawSourceInfo + ((if subdir == "" then "" else "/") + subdir);
-
- sourceInfo = rawSourceInfo // { inherit outPath; };
+ outPath = sourceInfo + ((if subdir == "" then "" else "/") + subdir);
flake = import (outPath + "/flake.nix");
@@ -47,7 +45,21 @@ let
outputs = flake.outputs (inputs // { self = result; });
- result = outputs // sourceInfo // { inherit inputs; inherit outputs; inherit sourceInfo; _type = "flake"; };
+ result =
+ outputs
+ # We add the sourceInfo attribute for its metadata, as they are
+ # relevant metadata for the flake. However, the outPath of the
+ # sourceInfo does not necessarily match the outPath of the flake,
+ # as the flake may be in a subdirectory of a source.
+ # This is shadowed in the next //
+ // sourceInfo
+ // {
+ # This shadows the sourceInfo.outPath
+ inherit outPath;
+
+ inherit inputs; inherit outputs; inherit sourceInfo; _type = "flake";
+ };
+
in
if node.flake or true then
assert builtins.isFunction flake.outputs;
diff --git a/tests/flakes/inputs.sh b/tests/flakes/inputs.sh
index d6269fc59..80620488a 100644
--- a/tests/flakes/inputs.sh
+++ b/tests/flakes/inputs.sh
@@ -46,6 +46,7 @@ test_git_subdir_self_path() {
default =
assert builtins.readFile ./message == "all good\n";
assert builtins.readFile (inputs.self + "/message") == "all good\n";
+ assert inputs.self.outPath == inputs.self.sourceInfo.outPath + "/b-low";
import ./simple.nix;
};
};