Use package upstream version. Skip revision. Improve regexp parsing.

This commit is contained in:
Christoph Haas 2018-08-22 13:11:28 +02:00
parent 56750c3884
commit 4a9fe8772e
3 changed files with 33 additions and 6 deletions

View file

@ -150,16 +150,16 @@ module DebImporter
end # def
class Version
attr_reader :epoch, :version, :revision, :version_string
attr_reader :epoch, :upstream, :revision, :version_string
def initialize(version_string)
@version_string = version_string
# Split into "[epoch:]version[-revision]"
unless /^(?<epoch>(\d+)\:)?(?<version>.+)(?<revision>\-[\+\.~]+)?/ =~ version_string
unless /^((?<epoch>\d+)\:)?(?<upstream>.+?)(\-(?<revision>.+))?$/ =~ version_string
raise ArgumentError, "Cannot parse version string: #{version_string}"
end
@epoch = epoch ? epoch : 0
@version = version
@epoch = epoch ? epoch : '0'
@upstream = upstream
@revision = revision if revision
end # /def

View file

@ -105,7 +105,7 @@ namespace :debshots do
new_version = DebImporter::Version.new(package[:Version])
Rails.logger.debug "Comparing package version: old=#{db_package.version} new=#{new_version}"
if new_version > current_version
if new_version.upstream > current_version.upstream
# update the package information from new data
update_data(package, db_package)
Rails.logger.info "Updating package information"
@ -241,7 +241,7 @@ def update_data(package, db_package)
Rails.logger.debug "New information: #{package.inspect}"
# Rails.logger.info "New package version found. Updating details in database."
db_package.version = package[:Version]
db_package.version = Version.new(package[:Version]).upstream
db_package.name = package[:Package] unless db_package.name # set the name for new packages
db_package.description = package[:Description][0..79]
db_package.homepage = package[:Homepage]

View file

@ -18,6 +18,33 @@ class PackagesHelperTest < ActionView::TestCase
assert(DebImporter::Version.new('1.0') > DebImporter::Version.new('1.0~pre'))
end
test "should split version files into epoch, upstream and revision" do
v = DebImporter::Version.new('1.0~git20170104-1')
assert_equal v.epoch, '0'
assert_equal v.upstream, '1.0~git20170104'
assert_equal v.revision, '1'
v = DebImporter::Version.new('0~20161219-1')
assert_equal v.epoch, '0'
assert_equal v.upstream, '0~20161219'
assert_equal v.revision, '1'
v = DebImporter::Version.new('17:2.0.0~git20161130.1.e60d0d5+dfsg1-1')
assert_equal v.epoch, '17'
assert_equal v.upstream, '2.0.0~git20161130.1.e60d0d5+dfsg1'
assert_equal v.revision, '1'
v = DebImporter::Version.new('42')
assert_equal v.epoch, '0'
assert_equal v.upstream, '42'
assert_nil v.revision
v = DebImporter::Version.new('100:9a_b~cdef')
assert_equal v.epoch, '100'
assert_equal v.upstream, '9a_b~cdef'
assert_nil v.revision
end
test "should be able to parse local Debian repository test files" do
Rails.logger = Logger.new(STDOUT)
# Rails.logger.level = Logger::ERROR