summaryrefslogtreecommitdiff
path: root/lib/path
diff options
context:
space:
mode:
Diffstat (limited to 'lib/path')
-rw-r--r--lib/path/default.nix8
-rw-r--r--lib/path/tests/unit.nix10
2 files changed, 17 insertions, 1 deletions
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;