locateDominatingFile
lib.filesystem.locateDominatingFile
Docs pulled from | This Revision | about 1 hour 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);