From 6e2e984af0a2f3197ff9ca6897a11fabdeb67ea7 Mon Sep 17 00:00:00 2001 From: Mikael Voss Date: Mon, 3 Mar 2025 17:19:00 +0100 Subject: [PATCH] lib/path: allow CA paths in hasStorePathPrefix --- lib/path/default.nix | 8 +++++++- lib/path/tests/unit.nix | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/path/default.nix b/lib/path/default.nix index 4ffee65e1cf5..be559eadf182 100644 --- a/lib/path/default.nix +++ b/lib/path/default.nix @@ -159,7 +159,13 @@ let # but this is not fully specified, so let's tie this too much to the currently implemented concept of store paths. # Similar reasoning applies to the validity of the name part. # We care more about discerning store path-ness on realistic values. Making it airtight would be fragile and slow. - && match ".{32}-.+" (elemAt components storeDirLength) != null; + && match ".{32}-.+" (elemAt components storeDirLength) != null + # alternatively match content‐addressed derivations, which _currently_ do + # not have a store directory prefix. + # This is a workaround for https://github.com/NixOS/nix/issues/12361 which + # was needed during the experimental phase of ca-derivations and should be + # removed once the issue has been resolved. + || match "[0-9a-z]{52}" (head components) != null; in # No rec! Add dependencies on this file at the top. diff --git a/lib/path/tests/unit.nix b/lib/path/tests/unit.nix index 903e8ff0acff..a52b4f44e51d 100644 --- a/lib/path/tests/unit.nix +++ b/lib/path/tests/unit.nix @@ -137,6 +137,16 @@ let expected = true; }; + # Test paths for content‐addressed derivations + testHasStorePathPrefixExample7 = { + expr = hasStorePathPrefix (/. + "/1121rp0gvr1qya7hvy925g5kjwg66acz6sn1ra1hca09f1z5dsab"); + expected = true; + }; + testHasStorePathPrefixExample8 = { + expr = hasStorePathPrefix (/. + "/1121rp0gvr1qya7hvy925g5kjwg66acz6sn1ra1hca09f1z5dsab/foo/bar"); + expected = true; + }; + # Test examples from the lib.path.subpath.isValid documentation testSubpathIsValidExample1 = { expr = subpath.isValid null;