From 7a07cc0da9787e936a6b4099c1109906088d3868 Mon Sep 17 00:00:00 2001 From: Mikael Voss Date: Wed, 5 Mar 2025 13:08:41 +0100 Subject: [PATCH] lib/strings: allow CA paths in isStorePath --- lib/strings.nix | 8 +++++++- lib/tests/misc.nix | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/strings.nix b/lib/strings.nix index bcaaab9af4fb..7ee459f5b443 100644 --- a/lib/strings.nix +++ b/lib/strings.nix @@ -2434,7 +2434,13 @@ rec { if isStringLike x then let str = toString x; in substring 0 1 str == "/" - && dirOf str == storeDir + && (dirOf str == storeDir + # 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. + || builtins.match "/[0-9a-z]{52}" str != null) else false; diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index e86c366d4ce4..fde2d44e3efe 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -537,6 +537,7 @@ runTests { expr = let goodPath = "${builtins.storeDir}/d945ibfx9x185xf04b890y4f9g3cbb63-python-2.7.11"; + goodCAPath = "/1121rp0gvr1qya7hvy925g5kjwg66acz6sn1ra1hca09f1z5dsab"; in { storePath = isStorePath goodPath; storePathDerivation = isStorePath (import ../.. { system = "x86_64-linux"; }).hello; @@ -545,6 +546,12 @@ runTests { nonAbsolute = isStorePath (concatStrings (tail (stringToCharacters goodPath))); asPath = isStorePath (/. + goodPath); otherPath = isStorePath "/something/else"; + + caPath = isStorePath goodCAPath; + caPathAppendix = isStorePath + "${goodCAPath}/bin/python"; + caAsPath = isStorePath (/. + goodCAPath); + otherVals = { attrset = isStorePath {}; list = isStorePath []; @@ -557,6 +564,9 @@ runTests { storePathAppendix = false; nonAbsolute = false; asPath = true; + caPath = true; + caPathAppendix = false; + caAsPath = true; otherPath = false; otherVals = { attrset = false;