Module: Puppet::Util::Package Private

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

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Defined Under Namespace

Modules: Version

Class Method Summary collapse

Class Method Details

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



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

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