38 lines
1.1 KiB
Nix
38 lines
1.1 KiB
Nix
{nib, ...}: let
|
|
inherit
|
|
(builtins)
|
|
isPath
|
|
substring
|
|
stringLength
|
|
;
|
|
|
|
inherit
|
|
(nib.trivial)
|
|
warnIf
|
|
;
|
|
in rec {
|
|
# re-export builtin string methods
|
|
inherit
|
|
substring
|
|
stringLength
|
|
;
|
|
|
|
removeSuffix = suffix: str:
|
|
# Before 23.05, paths would be copied to the store before converting them
|
|
# to strings and comparing. This was surprising and confusing.
|
|
warnIf (isPath suffix)
|
|
''
|
|
lib.strings.removeSuffix: The first argument (${toString suffix}) is a path value, but only strings are supported.
|
|
There is almost certainly a bug in the calling code, since this function never removes any suffix in such a case.
|
|
This function also copies the path to the Nix store, which may not be what you want.
|
|
This behavior is deprecated and will throw an error in the future.''
|
|
(
|
|
let
|
|
sufLen = stringLength suffix;
|
|
sLen = stringLength str;
|
|
in
|
|
if sufLen <= sLen && suffix == substring (sLen - sufLen) sufLen str
|
|
then substring 0 (sLen - sufLen) str
|
|
else str
|
|
);
|
|
}
|