mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 06:00:33 +03:00
lib.path.subpath.components: init
Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
This commit is contained in:
parent
4dc542d801
commit
4e14f5fee6
2 changed files with 44 additions and 0 deletions
|
@ -336,6 +336,37 @@ in /* No rec! Add dependencies on this file at the top. */ {
|
||||||
${subpathInvalidReason path}''
|
${subpathInvalidReason path}''
|
||||||
) 0 subpaths;
|
) 0 subpaths;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Split [a subpath](#function-library-lib.path.subpath.isValid) into its path component strings.
|
||||||
|
Throw an error if the subpath isn't valid.
|
||||||
|
Note that the returned path components are also valid subpath strings, though they are intentionally not [normalised](#function-library-lib.path.subpath.normalise).
|
||||||
|
|
||||||
|
Laws:
|
||||||
|
|
||||||
|
- Splitting a subpath into components and [joining](#function-library-lib.path.subpath.join) the components gives the same subpath but [normalised](#function-library-lib.path.subpath.normalise):
|
||||||
|
|
||||||
|
subpath.join (subpath.components s) == subpath.normalise s
|
||||||
|
|
||||||
|
Type:
|
||||||
|
subpath.components :: String -> [ String ]
|
||||||
|
|
||||||
|
Example:
|
||||||
|
subpath.components "."
|
||||||
|
=> [ ]
|
||||||
|
|
||||||
|
subpath.components "./foo//bar/./baz/"
|
||||||
|
=> [ "foo" "bar" "baz" ]
|
||||||
|
|
||||||
|
subpath.components "/foo"
|
||||||
|
=> <error>
|
||||||
|
*/
|
||||||
|
subpath.components =
|
||||||
|
subpath:
|
||||||
|
assert assertMsg (isValid subpath) ''
|
||||||
|
lib.path.subpath.components: Argument is not a valid subpath string:
|
||||||
|
${subpathInvalidReason subpath}'';
|
||||||
|
splitRelPath subpath;
|
||||||
|
|
||||||
/* Normalise a subpath. Throw an error if the subpath isn't valid, see
|
/* Normalise a subpath. Throw an error if the subpath isn't valid, see
|
||||||
`lib.path.subpath.isValid`
|
`lib.path.subpath.isValid`
|
||||||
|
|
||||||
|
|
|
@ -204,6 +204,19 @@ let
|
||||||
expr = (builtins.tryEval (subpath.normalise "..")).success;
|
expr = (builtins.tryEval (subpath.normalise "..")).success;
|
||||||
expected = false;
|
expected = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
testSubpathComponentsExample1 = {
|
||||||
|
expr = subpath.components ".";
|
||||||
|
expected = [ ];
|
||||||
|
};
|
||||||
|
testSubpathComponentsExample2 = {
|
||||||
|
expr = subpath.components "./foo//bar/./baz/";
|
||||||
|
expected = [ "foo" "bar" "baz" ];
|
||||||
|
};
|
||||||
|
testSubpathComponentsExample3 = {
|
||||||
|
expr = (builtins.tryEval (subpath.components "/foo")).success;
|
||||||
|
expected = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
if cases == [] then "Unit tests successful"
|
if cases == [] then "Unit tests successful"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue