From 03554797153aa90263161784c296ef6518af3358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Na=C3=AFm=20Favier?= Date: Tue, 20 Dec 2022 18:38:47 +0100 Subject: [PATCH] lib/versions: add `pad` Pad a version string with zeros to match a given number of components. --- lib/tests/misc.nix | 15 +++++++++++++++ lib/versions.nix | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index c719fcf5d4fa..faf2b96530c1 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 0e9d81ac78b1..986e7e5f9b37 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; + }