summary refs log tree commit diff
path: root/lib/versions.nix
blob: 986e7e5f9b37d7aed3135708884428c5296ef177 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/* Version string functions. */
{ lib }:

rec {

  /* Break a version string into its component parts.

     Example:
       splitVersion "1.2.3"
       => ["1" "2" "3"]
  */
  splitVersion = builtins.splitVersion or (lib.splitString ".");

  /* Get the major version string from a string.

    Example:
      major "1.2.3"
      => "1"
  */
  major = v: builtins.elemAt (splitVersion v) 0;

  /* Get the minor version string from a string.

    Example:
      minor "1.2.3"
      => "2"
  */
  minor = v: builtins.elemAt (splitVersion v) 1;

  /* Get the patch version string from a string.

    Example:
      patch "1.2.3"
      => "3"
  */
  patch = v: builtins.elemAt (splitVersion v) 2;

  /* Get string of the first two parts (major and minor)
     of a version string.

     Example:
       majorMinor "1.2.3"
       => "1.2"
  */
  majorMinor = v:
    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;

}