diff --git a/lib/deb_importer.rb b/lib/deb_importer.rb index 6d2b96d..41e2515 100644 --- a/lib/deb_importer.rb +++ b/lib/deb_importer.rb @@ -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 /^(?(\d+)\:)?(?.+)(?\-[\+\.~]+)?/ =~ version_string + unless /^((?\d+)\:)?(?.+?)(\-(?.+))?$/ =~ 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 diff --git a/lib/tasks/import_debian.rake b/lib/tasks/import_debian.rake index f136df6..c2b769c 100644 --- a/lib/tasks/import_debian.rake +++ b/lib/tasks/import_debian.rake @@ -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] diff --git a/test/lib/deb_importer_test.rb b/test/lib/deb_importer_test.rb index 664c80d..b22a9cf 100644 --- a/test/lib/deb_importer_test.rb +++ b/test/lib/deb_importer_test.rb @@ -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