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

Merge pull request #13026 from roberth/issue-13018

Fix issue #13018, `sourceInfo` strict in `outputs`
This commit is contained in:
Jörg Thalheim 2025-04-15 13:51:02 +02:00 committed by GitHub
commit 99a16c5203
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 43 additions and 9 deletions

View file

@ -14,6 +14,7 @@ overrides:
fetchTreeFinal:
let
inherit (builtins) mapAttrs;
lockFile = builtins.fromJSON lockFileStr;
@ -35,19 +36,26 @@ let
(resolveInput lockFile.nodes.${nodeName}.inputs.${builtins.head path})
(builtins.tail path);
allNodes = builtins.mapAttrs (
allNodes = mapAttrs (
key: node:
let
parentNode = allNodes.${getInputByPath lockFile.root node.parent};
flakeDir =
let
dir = overrides.${key}.dir or node.locked.path or "";
parentDir = parentNode.flakeDir;
in
if node ? parent then parentDir + ("/" + dir) else dir;
sourceInfo =
if overrides ? ${key} then
overrides.${key}.sourceInfo
else if node.locked.type == "path" && builtins.substring 0 1 node.locked.path != "/" then
parentNode.sourceInfo
// {
outPath = parentNode.outPath + ("/" + node.locked.path);
outPath = parentNode.sourceInfo.outPath + ("/" + flakeDir);
}
else
# FIXME: remove obsolete node.info.
@ -60,7 +68,7 @@ let
flake = import (outPath + "/flake.nix");
inputs = builtins.mapAttrs (inputName: inputSpec: allNodes.${resolveInput inputSpec}) (
inputs = mapAttrs (inputName: inputSpec: allNodes.${resolveInput inputSpec}.result) (
node.inputs or { }
);
@ -85,12 +93,17 @@ let
};
in
if node.flake or true then
assert builtins.isFunction flake.outputs;
result
else
sourceInfo
{
result =
if node.flake or true then
assert builtins.isFunction flake.outputs;
result
else
sourceInfo;
inherit flakeDir sourceInfo;
}
) lockFile.nodes;
in
allNodes.${lockFile.root}
allNodes.${lockFile.root}.result

View file

@ -108,3 +108,24 @@ EOF
[[ $(nix eval "$rootFlake#z") = 90 ]]
fi
# https://github.com/NixOS/nix/pull/10089#discussion_r2041984987
# https://github.com/NixOS/nix/issues/13018
mkdir -p "$TEST_ROOT/issue-13018/example"
(
cd "$TEST_ROOT/issue-13018"
git init
echo '{ outputs = _: { }; }' >flake.nix
cat >example/flake.nix <<EOF
{
inputs.parent.url = ../.;
outputs = { parent, ... }: builtins.seq parent { ok = null; };
}
EOF
git add -N .
cd example
# Important: the error does not trigger for an in-memory lock!
nix flake lock
# would fail:
nix eval .#ok
)