Commit bb6eab0b authored by Silvan Mosberger's avatar Silvan Mosberger
Browse files

lib.filesystem.pathType: Fix for filesystem root argument

Previously this function couldn't handle / being passed, it would throw
an error:

error: attribute '' missing

       at nixpkgs/lib/filesystem.nix:24:20:

           23|   */
           24|   pathType = path: (readDir (dirOf path)).${baseNameOf path};
             |                    ^
           25|

Consequently this also fixes the
lib.filesystem.{pathIsDirectory,pathIsRegularFile} functions.
parent 5346636c
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -22,7 +22,12 @@ in
    Returns the type of a path: regular (for file), symlink, or directory.
  */
  pathType = path:
    (readDir (dirOf path)).${baseNameOf path};
    # 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
    then "directory"
    else (readDir (dirOf path)).${baseNameOf path};

  /*
    Returns true if the path exists and is a directory, false otherwise.
+3 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ checkPathType() {
    fi
}

checkPathType "/" '"directory"'
checkPathType "$PWD/directory" '"directory"'
checkPathType "$PWD/regular" '"regular"'
checkPathType "$PWD/symlink" '"symlink"'
@@ -62,6 +63,7 @@ checkPathIsDirectory() {
    fi
}

checkPathIsDirectory "/" "true"
checkPathIsDirectory "$PWD/directory" "true"
checkPathIsDirectory "$PWD/regular" "false"
checkPathIsDirectory "$PWD/symlink" "false"
@@ -79,6 +81,7 @@ checkPathIsRegularFile() {
    fi
}

checkPathIsRegularFile "/" "false"
checkPathIsRegularFile "$PWD/directory" "false"
checkPathIsRegularFile "$PWD/regular" "true"
checkPathIsRegularFile "$PWD/symlink" "false"