summary refs log tree commit diff
diff options
context:
space:
mode:
authorNaïm Favier <n@monade.li>2022-12-20 18:38:47 +0100
committerNaïm Favier <n@monade.li>2022-12-21 12:58:21 +0100
commit03554797153aa90263161784c296ef6518af3358 (patch)
treef7ddfee6960e6d04a4696ea9c58195412c0e5b85
parent3ff39f984faa5f528f7ac5e548110d4e20327aa1 (diff)
downloadnixpkgs-03554797153aa90263161784c296ef6518af3358.tar
nixpkgs-03554797153aa90263161784c296ef6518af3358.tar.gz
nixpkgs-03554797153aa90263161784c296ef6518af3358.tar.bz2
nixpkgs-03554797153aa90263161784c296ef6518af3358.tar.lz
nixpkgs-03554797153aa90263161784c296ef6518af3358.tar.xz
nixpkgs-03554797153aa90263161784c296ef6518af3358.tar.zst
nixpkgs-03554797153aa90263161784c296ef6518af3358.zip
lib/versions: add `pad`
Pad a version string with zeros to match a given number of components.
-rw-r--r--lib/tests/misc.nix15
-rw-r--r--lib/versions.nix15
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index c719fcf5d4f..faf2b96530c 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -212,6 +212,21 @@ runTests {
     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 =
diff --git a/lib/versions.nix b/lib/versions.nix
index 0e9d81ac78b..986e7e5f9b3 100644
--- a/lib/versions.nix
+++ b/lib/versions.nix
@@ -46,4 +46,19 @@ rec {
     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;
+
 }