summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSilvan Mosberger <silvan.mosberger@tweag.io>2023-04-05 16:58:29 +0200
committerSilvan Mosberger <silvan.mosberger@tweag.io>2023-05-22 14:13:57 +0200
commitd064d972f07b908db3efb909d6663bee3adf8d40 (patch)
tree3ba519508fcd3f5e27ea95d567cbb870cc554d3b /lib
parentbb6eab0bdbe060cb578fc9be5925a76a1635424f (diff)
lib.filesystem.pathType: Improve error for non-existent paths
Previously it would fail with error: attribute 'nonexistent' missing at nixpkgs/lib/filesystem.nix:29:10: 28| if dirOf path == path then "directory" 29| else (readDir (dirOf path)).${baseNameOf path}; | ^ 30|
Diffstat (limited to 'lib')
-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 13f4ebb26402..db120a48c64b 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 61710da92ba2..4a5ffeb12431 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