Module: Puppet::Util::Package

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

Class Method Summary collapse

Class Method Details

.versioncmp(version_a, version_b) ⇒ Object


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

def versioncmp(version_a, version_b)
  vre = /[-.]|\d+|[^-.\d]+/
  ax = version_a.scan(vre)
  bx = version_b.scan(vre)

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

    if( a == b )                 then next
    elsif (a == '-' && b == '-') then next
    elsif (a == '-')             then return -1
    elsif (b == '-')             then return 1
    elsif (a == '.' && b == '.') then next
    elsif (a == '.' )            then return -1
    elsif (b == '.' )            then return 1
    elsif (a =~ /^\d+$/ && b =~ /^\d+$/) then
      if( a =~ /^0/ or b =~ /^0/ ) then
        return a.to_s.upcase <=> b.to_s.upcase
      end
      return a.to_i <=> b.to_i
    else
      return a.upcase <=> b.upcase
    end
  end
  version_a <=> version_b;
end