about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nix/utils/default.nix7
-rw-r--r--nix/utils/tests/default.nix4
2 files changed, 8 insertions, 3 deletions
diff --git a/nix/utils/default.nix b/nix/utils/default.nix
index f65d4712a03d..258e372a2a2d 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 1ba68486077e..8a078684f3aa 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