blob: 613aa6b1ed2e966a61659cb81f9a1d414b18c783 (
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
|
require 'puppet'
module Puppet::Util::Package
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) do
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
return version_a <=> version_b;
end
module_function :versioncmp
end
|