RPM Version Comparison Revisited
Posted by kev Fri, 21 Sep 2007 20:21:00 GMT
# Equivalent to rpmvercmp in librpm, eccentricities and all
def <=>(other)
return 0 if self.version == other.version and self.rel == other.rel
versions = self.version.split(/[^[:alnum:]]/).push self.rel
other_versions = other.version.split(/[^[:alnum:]]/).push other.rel
return 1 if versions.size > other_versions.size
return -1 if versions.size < other_versions.size
versions.size.times do |n|
if versions[n] =~ /[^\d]/ && other_versions[n] =~ /[^\d]/
comparison = (versions[n] <=> other_versions[n])
elsif versions[n] !~ /[^\d]/ && other_versions[n] !~ /[^\d]/
comparison = (versions[n].to_i <=> other_versions[n].to_i)
else
comparison = -1
end
return comparison unless comparison.zero?
end
return 0
endOriginal version sort was here.

