locateDominatingFile
lib.filesystem.locateDominatingFile
Docs pulled from | This Revision | 34 minutes ago
Find the first directory containing a file matching 'pattern' upward from a given 'file'. Returns 'null' if no directories contain a file matching 'pattern'.
Inputs
pattern
-
The pattern to search for
file
-
The file to start searching upward from
Type
RegExp -> Path -> Nullable { path : Path; matches : [ MatchResults ]; }
Noogle detected
Implementation
The following is the current implementation of this function.
locateDominatingFile =
pattern:
file:
let go = path:
let files = builtins.attrNames (builtins.readDir path);
matches = builtins.filter (match: match != null)
(map (builtins.match pattern) files);
in
if builtins.length matches != 0
then { inherit path matches; }
else if path == /.
then null
else go (dirOf path);
parent = dirOf file;
isDir =
let base = baseNameOf file;
type = (builtins.readDir parent).${base} or null;
in file == /. || type == "directory";
in go (if isDir then file else parent);