Read-only mirror — the public repositories of the Forgejo instance, refreshed every 10 minutes. The live instance (fg.dieschoenewolke.de) is reachable only over the VPN; clone here with https://git.dieschoenewolke.de/git/<owner>/<repo>.git.
summaryrefslogtreecommitdiff
path: root/src/git-version.ts
blob: 44bee1ae5944aa099703b8eb01f2dbcbed0dd08f (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
export class GitVersion {
  private readonly major: number = NaN
  private readonly minor: number = NaN
  private readonly patch: number = NaN

  /**
   * Used for comparing the version of git and git-lfs against the minimum required version
   * @param version the version string, e.g. 1.2 or 1.2.3
   */
  constructor(version?: string) {
    if (version) {
      const match = version.match(/^(\d+)\.(\d+)(\.(\d+))?$/)
      if (match) {
        this.major = Number(match[1])
        this.minor = Number(match[2])
        if (match[4]) {
          this.patch = Number(match[4])
        }
      }
    }
  }

  /**
   * Compares the instance against a minimum required version
   * @param minimum Minimum version
   */
  checkMinimum(minimum: GitVersion): boolean {
    if (!minimum.isValid()) {
      throw new Error('Arg minimum is not a valid version')
    }

    // Major is insufficient
    if (this.major < minimum.major) {
      return false
    }

    // Major is equal
    if (this.major === minimum.major) {
      // Minor is insufficient
      if (this.minor < minimum.minor) {
        return false
      }

      // Minor is equal
      if (this.minor === minimum.minor) {
        // Patch is insufficient
        if (this.patch && this.patch < (minimum.patch || 0)) {
          return false
        }
      }
    }

    return true
  }

  /**
   * Indicates whether the instance was constructed from a valid version string
   */
  isValid(): boolean {
    return !isNaN(this.major)
  }

  /**
   * Returns the version as a string, e.g. 1.2 or 1.2.3
   */
  toString(): string {
    let result = ''
    if (this.isValid()) {
      result = `${this.major}.${this.minor}`
      if (!isNaN(this.patch)) {
        result += `.${this.patch}`
      }
    }

    return result
  }
}