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;