lib/versions: add `pad`

Pad a version string with zeros to match a given number of components.

Changed files
+30
lib
+15
lib/tests/misc.nix
···
expected = [ "1" "2" "3" ];
};
+
testPadVersionLess = {
+
expr = versions.pad 3 "1.2";
+
expected = "1.2.0";
+
};
+
+
testPadVersionLessExtra = {
+
expr = versions.pad 3 "1.3-rc1";
+
expected = "1.3.0-rc1";
+
};
+
+
testPadVersionMore = {
+
expr = versions.pad 3 "1.2.3.4";
+
expected = "1.2.3";
+
};
+
testIsStorePath = {
expr =
let goodPath =
+15
lib/versions.nix
···
builtins.concatStringsSep "."
(lib.take 2 (splitVersion v));
+
/* Pad a version string with zeros to match the given number of components.
+
+
Example:
+
pad 3 "1.2"
+
=> "1.2.0"
+
pad 3 "1.3-rc1"
+
=> "1.3.0-rc1"
+
pad 3 "1.2.3.4"
+
=> "1.2.3"
+
*/
+
pad = n: version: let
+
numericVersion = lib.head (lib.splitString "-" version);
+
versionSuffix = lib.removePrefix numericVersion version;
+
in lib.concatStringsSep "." (lib.take n (lib.splitVersion numericVersion ++ lib.genList (_: "0") n)) + versionSuffix;
+
}