aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-12 02:33:43 +0000
committertv <tv@krebsco.de>2026-11-12 02:33:43 +0000
commitd63531d2d42524f5150d138000bec42fd49d1e71 (patch)
tree9d5e3cdfa081251e4524b8e4b9678312b57d2fe5 /tests
parent408fcc6584ca598533a0f8c9012d60450db148a8 (diff)
populate: draw inputs from sources that aren't flakes
Generated flakes declared every source they draw inputs from as a flake, so drawing an input declared with flake = false from a source without flake.nix failed, although the README says it works. Such sources get declared with flake = false now. An edge case draws a non-flake input from a source without flake.nix.
Diffstat (limited to 'tests')
-rwxr-xr-xtests/fixtures.sh11
-rw-r--r--tests/scenarios.nix11
2 files changed, 22 insertions, 0 deletions
diff --git a/tests/fixtures.sh b/tests/fixtures.sh
index 8222b13..1f6c478 100755
--- a/tests/fixtures.sh
+++ b/tests/fixtures.sh
@@ -233,6 +233,17 @@ cat > /fixtures/c2/flake.nix <<'NIX'
{ outputs = _: { who = "c2"; }; }
NIX
+# usedata, data: a flake with an input that isn't a flake, and a directory
+# to draw it from.
+mkdir /fixtures/usedata /fixtures/data
+cat > /fixtures/usedata/flake.nix <<'NIX'
+{
+ inputs.data = { url = "path:/nonexistent"; flake = false; };
+ outputs = { data, ... }: { msg = "data:${builtins.readFile (data + "/value")}"; };
+}
+NIX
+printf hello > /fixtures/data/value
+
# noflake: a directory without flake.nix.
mkdir /fixtures/noflake
echo noflake > /fixtures/noflake/README
diff --git a/tests/scenarios.nix b/tests/scenarios.nix
index 5dd44db..eeeb665 100644
--- a/tests/scenarios.nix
+++ b/tests/scenarios.nix
@@ -883,6 +883,17 @@ assert !(krops.isLocalTarget (targets.remote "/"));
'';
};
})
+ (s "nonflake-input" {
+ phases = twice {
+ sources = {
+ x.file = { path = "/fixtures/usedata"; inputs.data.follows = "data"; };
+ data.file = "/fixtures/data";
+ };
+ check = ''
+ expect_eq msg "$(nix_eval "$T"/.populate/flakes/x#msg)" data:hello
+ '';
+ };
+ })
] ++ lib.optional (targetKind == "local")
# The target has the path the input is locked to.
(s "uselocal" {