Module: Puppet::Util::Package

Defined in:
lib/puppet/util/package.rb

Defined Under Namespace

Modules: Version

Class Method Summary collapse

Class Method Details

.versioncmp(version_a, version_b, ignore_trailing_zeroes = false) ⇒ Object



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
# File 'lib/puppet/util/package.rb', line 4

def versioncmp(version_a, version_b, ignore_trailing_zeroes = false)
  vre = /[-.]|\d+|[^-.\d]+/

  if ignore_trailing_zeroes
    version_a = normalize(version_a)
    version_b = normalize(version_b)
  end

  ax = version_a.scan(vre)
  bx = version_b.scan(vre)

  while ax.length > 0 && bx.length > 0
    a = ax.shift
    b = bx.shift

    next      if a == b
    return -1 if a == '-'
    return 1  if b == '-'
    return -1 if a == '.'
    return 1  if b == '.'

    if a =~ /^\d+$/ && b =~ /^\d+$/
      return a.to_s.upcase <=> b.to_s.upcase if a =~ /^0/ || b =~ /^0/

      return a.to_i <=> b.to_i
    end
    return a.upcase <=> b.upcase
  end
  version_a <=> version_b
end