From 887ac4d3d479b2c5c991ed718792bba7a38b4948 Mon Sep 17 00:00:00 2001 From: sterni Date: Thu, 16 Dec 2021 17:28:21 +0100 Subject: feat(nix/utils): handle toString-able sets produced by builtins.path When preparing cl/4381 I noticed that we actually handle this case properly. depot.nix.utils.storePathName depot.path now works as expected. Change-Id: Ice9329c67b2e2210852012f5abe82fbbb13193de Reviewed-on: https://cl.tvl.fyi/c/depot/+/4382 Tested-by: BuildkiteCI Reviewed-by: tazjin Autosubmit: sterni --- nix/utils/default.nix | 7 ++++--- nix/utils/tests/default.nix | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'nix/utils') diff --git a/nix/utils/default.nix b/nix/utils/default.nix index f65d4712a0..258e372a2a 100644 --- a/nix/utils/default.nix +++ b/nix/utils/default.nix @@ -21,17 +21,18 @@ let then p.name else if builtins.isPath p then builtins.baseNameOf p - else if builtins.isString p + else if builtins.isString p || (builtins.isAttrs p && (p ? outPath || p ? __toString)) then let + strPath = toString p; # strip leading storeDir and trailing slashes noStoreDir = lib.removeSuffix "/" - (lib.removePrefix "${builtins.storeDir}/" p); + (lib.removePrefix "${builtins.storeDir}/" strPath); # a basename of a child of a store path isn't really # referring to a store path, so removing the string # context is safe (e. g. "hello" for "${hello}/bin/hello"). basename = builtins.unsafeDiscardStringContext - (builtins.baseNameOf p); + (builtins.baseNameOf strPath); in # If p is a direct child of storeDir, we need to remove # the leading hash as well to make sure that: diff --git a/nix/utils/tests/default.nix b/nix/utils/tests/default.nix index 1ba6848607..8a078684f3 100644 --- a/nix/utils/tests/default.nix +++ b/nix/utils/tests/default.nix @@ -85,6 +85,8 @@ let cheddarStorePath = builtins.unsafeDiscardStringContext depot.tools.cheddar.outPath; + cleanedSource = lib.cleanSource ./.; + storePathNameTests = it "correctly gets the basename of a store path" [ (assertEq "base name of a derivation" (storePathName depot.tools.cheddar) depot.tools.cheddar.name) @@ -94,6 +96,8 @@ let (storePathName "${cheddarStorePath}/bin/cheddar") "cheddar") (assertEq "base name of a path" (storePathName ../default.nix) "default.nix") + (assertEq "base name of a cleanSourced path" + (storePathName cleanedSource) cleanedSource.name) ]; in -- cgit 1.4.1