@ -20,17 +20,26 @@ let
readFile
;
# Returns the type of a path: regular (for file), symlink, or directory
pathType = p : getAttr ( baseNameOf p ) ( readDir ( dirOf p ) ) ;
/*
Returns the type of a path : regular ( for file ) , symlink , or directory .
* /
pathType = path : getAttr ( baseNameOf path ) ( readDir ( dirOf path ) ) ;
# Returns true if the path exists and is a directory, false otherwise
pathIsDirectory = p : if pathExists p then ( pathType p ) == " d i r e c t o r y " else false ;
/*
Returns true if the path exists and is a directory , false otherwise .
* /
pathIsDirectory = path : if pathExists path then ( pathType path ) == " d i r e c t o r y " else false ;
# Returns true if the path exists and is a regular file, false otherwise
pathIsRegularFile = p : if pathExists p then ( pathType p ) == " r e g u l a r " else false ;
/*
Returns true if the path exists and is a regular file , false otherwise .
* /
pathIsRegularFile = path : if pathExists path then ( pathType path ) == " r e g u l a r " else false ;
# Bring in a path as a source, filtering out all Subversion and CVS
# directories, as well as backup files (*~).
/*
A basic filter for ` cleanSourceWith ` that removes
directories of version control system , backup files ( * ~ )
and some generated files .
* /
cleanSourceFilter = name : type : let baseName = baseNameOf ( toString name ) ; in ! (
# Filter out version control software files/directories
( baseName == " . g i t " || type == " d i r e c t o r y " && ( baseName == " . s v n " || baseName == " C V S " || baseName == " . h g " ) ) ||
@ -48,43 +57,48 @@ let
( type == " u n k n o w n " )
) ;
# Filters a source tree removing version control files and directories using cleanSourceWith
#
# Example:
# cleanSource ./.
/*
Filters a source tree removing version control files and directories using cleanSourceFilter .
Example :
cleanSource ./.
* /
cleanSource = src : cleanSourceWith { filter = cleanSourceFilter ; inherit src ; } ;
# Like `builtins.filterSource`, except it will compose with itself,
# allowing you to chain multiple calls together without any
# intermediate copies being put in the nix store.
#
# lib.cleanSourceWith {
# filter = f;
# src = lib.cleanSourceWith {
# filter = g;
# src = ./.;
# };
# }
# # Succeeds!
#
# builtins.filterSource f (builtins.filterSource g ./.)
# # Fails!
#
# Parameters:
#
# src: A path or cleanSourceWith result to filter and/or rename.
#
# filter: A function (path -> type -> bool)
# Optional with default value: constant true (include everything)
# The function will be combined with the && operator such
# that src.filter is called lazily.
# For implementing a filter, see
# https://nixos.org/nix/manual/#builtin-filterSource
#
# name: Optional name to use as part of the store path.
# This defaults to `src.name` or otherwise `"source"`.
#
cleanSourceWith = { filter ? _path : _type : true , src , name ? null }:
/*
Like ` builtins . filterSource ` , except it will compose with itself ,
allowing you to chain multiple calls together without any
intermediate copies being put in the nix store .
Example :
lib . cleanSourceWith {
filter = f ;
src = lib . cleanSourceWith {
filter = g ;
src = ./. ;
} ;
}
# Succeeds!
builtins . filterSource f ( builtins . filterSource g ./. )
# Fails!
* /
cleanSourceWith =
{
# A path or cleanSourceWith result to filter and/or rename.
src ,
# Optional with default value: constant true (include everything)
# The function will be combined with the && operator such
# that src.filter is called lazily.
# For implementing a filter, see
# https://nixos.org/nix/manual/#builtin-filterSource
# Type: A function (path -> type -> bool)
filter ? _path : _type : true ,
# Optional name to use as part of the store path.
# This defaults to `src.name` or otherwise `"source"`.
name ? null
} :
let
orig = toSourceAttributes src ;
in fromSourceAttributes {
@ -116,9 +130,11 @@ let
satisfiesSubpathInvariant = src ? satisfiesSubpathInvariant && src . satisfiesSubpathInvariant ;
} ;
# Filter sources by a list of regular expressions.
#
# E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]`
/*
Filter sources by a list of regular expressions .
Example : src = sourceByRegex ./my-subproject [ " . * \. p y $ " " ^ d a t a b a s e . s q l $ " ]
* /
sourceByRegex = src : regexes :
let
isFiltered = src ? _isLibCleanSourceWith ;
@ -153,8 +169,11 @@ let
pathIsGitRepo = path : ( tryEval ( commitIdFromGitRepo path ) ) . success ;
# Get the commit id of a git repo
# Example: commitIdFromGitRepo <nixpkgs/.git>
/*
Get the commit id of a git repo .
Example : commitIdFromGitRepo <nixpkgs/.git>
* /
commitIdFromGitRepo =
let readCommitFromFile = file : path :
let fileName = toString path + " / " + file ;