mirror of
https://github.com/SebastianWendel/nixpkgs.git
synced 2024-09-20 04:19:00 +02:00
lib: Automatically generate lib.filesytem docs
This commit is contained in:
parent
8e75d721c2
commit
9bfc4bbd63
|
@ -22,6 +22,7 @@ with pkgs; stdenv.mkDerivation {
|
||||||
docgen lists 'List manipulation functions'
|
docgen lists 'List manipulation functions'
|
||||||
docgen debug 'Debugging functions'
|
docgen debug 'Debugging functions'
|
||||||
docgen options 'NixOS / nixpkgs option handling'
|
docgen options 'NixOS / nixpkgs option handling'
|
||||||
|
docgen filesystem 'Filesystem functions'
|
||||||
docgen sources 'Source filtering functions'
|
docgen sources 'Source filtering functions'
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,5 +26,7 @@
|
||||||
|
|
||||||
<xi:include href="./library/generated/options.xml" />
|
<xi:include href="./library/generated/options.xml" />
|
||||||
|
|
||||||
|
<xi:include href="./library/generated/filesystem.xml" />
|
||||||
|
|
||||||
<xi:include href="./library/generated/sources.xml" />
|
<xi:include href="./library/generated/sources.xml" />
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -1,9 +1,23 @@
|
||||||
|
# Functions for copying sources to the Nix store.
|
||||||
{ lib }:
|
{ lib }:
|
||||||
{ # haskellPathsInDir : Path -> Map String Path
|
|
||||||
# A map of all haskell packages defined in the given path,
|
let
|
||||||
# identified by having a cabal file with the same name as the
|
inherit (lib.strings)
|
||||||
# directory itself.
|
hasPrefix
|
||||||
haskellPathsInDir = root:
|
;
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
A map of all haskell packages defined in the given path,
|
||||||
|
identified by having a cabal file with the same name as the
|
||||||
|
directory itself.
|
||||||
|
|
||||||
|
Type: Path -> Map String Path
|
||||||
|
*/
|
||||||
|
haskellPathsInDir =
|
||||||
|
# The directory within to search
|
||||||
|
root:
|
||||||
let # Files in the root
|
let # Files in the root
|
||||||
root-files = builtins.attrNames (builtins.readDir root);
|
root-files = builtins.attrNames (builtins.readDir root);
|
||||||
# Files with their full paths
|
# Files with their full paths
|
||||||
|
@ -17,15 +31,18 @@
|
||||||
builtins.pathExists (value + "/${name}.cabal")
|
builtins.pathExists (value + "/${name}.cabal")
|
||||||
) root-files-with-paths;
|
) root-files-with-paths;
|
||||||
in builtins.listToAttrs cabal-subdirs;
|
in builtins.listToAttrs cabal-subdirs;
|
||||||
# locateDominatingFile : RegExp
|
/*
|
||||||
# -> Path
|
Find the first directory containing a file matching 'pattern'
|
||||||
# -> Nullable { path : Path;
|
upward from a given 'file'.
|
||||||
# matches : [ MatchResults ];
|
Returns 'null' if no directories contain a file matching 'pattern'.
|
||||||
# }
|
|
||||||
# Find the first directory containing a file matching 'pattern'
|
Type: RegExp -> Path -> Nullable { path : Path; matches : [ MatchResults ]; }
|
||||||
# upward from a given 'file'.
|
*/
|
||||||
# Returns 'null' if no directories contain a file matching 'pattern'.
|
locateDominatingFile =
|
||||||
locateDominatingFile = pattern: file:
|
# The pattern to search for
|
||||||
|
pattern:
|
||||||
|
# The file to start searching upward from
|
||||||
|
file:
|
||||||
let go = path:
|
let go = path:
|
||||||
let files = builtins.attrNames (builtins.readDir path);
|
let files = builtins.attrNames (builtins.readDir path);
|
||||||
matches = builtins.filter (match: match != null)
|
matches = builtins.filter (match: match != null)
|
||||||
|
@ -44,10 +61,15 @@
|
||||||
in go (if isDir then file else parent);
|
in go (if isDir then file else parent);
|
||||||
|
|
||||||
|
|
||||||
# listFilesRecursive: Path -> [ Path ]
|
/*
|
||||||
#
|
Given a directory, return a flattened list of all files within it recursively.
|
||||||
# Given a directory, return a flattened list of all files within it recursively.
|
|
||||||
listFilesRecursive = dir: lib.flatten (lib.mapAttrsToList (name: type:
|
Type: Path -> [ Path ]
|
||||||
|
*/
|
||||||
|
listFilesRecursive =
|
||||||
|
# The path to recursively list
|
||||||
|
dir:
|
||||||
|
lib.flatten (lib.mapAttrsToList (name: type:
|
||||||
if type == "directory" then
|
if type == "directory" then
|
||||||
lib.filesystem.listFilesRecursive (dir + "/${name}")
|
lib.filesystem.listFilesRecursive (dir + "/${name}")
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue