summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/filesystem.nix6
-rwxr-xr-xlib/tests/filesystem.sh1
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/filesystem.nix b/lib/filesystem.nix
index 13f4ebb2640..db120a48c64 100644
--- a/lib/filesystem.nix
+++ b/lib/filesystem.nix
@@ -22,10 +22,14 @@ in
     Returns the type of a path: regular (for file), symlink, or directory.
   */
   pathType = path:
+    if ! pathExists path
+    # Fail irrecoverably to mimic the historic behavior of this function and
+    # the new builtins.readFileType
+    then abort "lib.filesystem.pathType: Path ${toString path} does not exist."
     # The filesystem root is the only path where `dirOf / == /` and
     # `baseNameOf /` is not valid. We can detect this and directly return
     # "directory", since we know the filesystem root can't be anything else.
-    if dirOf path == path
+    else if dirOf path == path
     then "directory"
     else (readDir (dirOf path)).${baseNameOf path};
 
diff --git a/lib/tests/filesystem.sh b/lib/tests/filesystem.sh
index 61710da92ba..4a5ffeb1243 100755
--- a/lib/tests/filesystem.sh
+++ b/lib/tests/filesystem.sh
@@ -51,6 +51,7 @@ checkPathType "$PWD/directory" '"directory"'
 checkPathType "$PWD/regular" '"regular"'
 checkPathType "$PWD/symlink" '"symlink"'
 checkPathType "$PWD/fifo" '"unknown"'
+checkPathType "$PWD/non-existent" "error: evaluation aborted with the following error message: 'lib.filesystem.pathType: Path $PWD/non-existent does not exist.'"
 
 checkPathIsDirectory() {
     local path=$1