diff --git a/lib/tasks/import_debian.rake b/lib/tasks/import_debian.rake index 262ca02..9b2b9c1 100644 --- a/lib/tasks/import_debian.rake +++ b/lib/tasks/import_debian.rake @@ -39,72 +39,109 @@ BLACKLIST_SECTION_PATTERN = [ # Whether to delete a packag REMOVE_BLACKLISTED_PACKAGE = true -desc "Import package information from Debian-style Packages files" +namespace :debshots do + desc "Import/update package database from configured DEB repositories" -task :import_debian => :environment do - repositories = Rails.configuration.package_sources - Rails.logger = Logger.new(STDOUT) - Rails.logger.level = Logger::INFO - #Rails.logger.level = Logger::DEBUG + task :update_from_deb_repos => :environment do + repositories = Rails.configuration.package_sources + Rails.logger = Logger.new(STDOUT) + Rails.logger.level = Logger::INFO + #Rails.logger.level = Logger::DEBUG - Rails.logger.info "Importing Debian package information" + Rails.logger.info "Importing Debian package information" - repositories.each do |repository| - Rails.logger.info "Fetching Release file for repository: #{repository[:url]} with components: #{repository[:components]}" - release = DebImporter::Release.new(repository[:url], repository[:components]) - Rails.logger.info "> Supported architectures are: #{release.architectures}" - Rails.logger.info "> Supported components are: #{release.components}" + repositories.each do |repository| + Rails.logger.info "Fetching Release file for repository: #{repository[:url]} with components: #{repository[:components]}" + release = DebImporter::Release.new(repository[:url], repository[:components]) + Rails.logger.info "> Supported architectures are: #{release.architectures}" + Rails.logger.info "> Supported components are: #{release.components}" - # TODO: Remember what we imported to show it on the /about page + # TODO: Remember what we imported to show it on the /about page - release.components.split.each do |component| - Rails.logger.info "> Component: #{component}" - release.architectures.split.each do |architecture| - Rails.logger.info ">> Architecture: #{architecture}" - # Check if this component and architecture is available on this mirror - packages = release.packages(component, architecture) - unless packages - Rails.logger.error "No packages for component #{component} on architecture #{architecture} found on this mirror" - next - end - - Rails.logger.info "Packages file for #{component} on #{architecture} found." - Rails.logger.debug "Got: #{packages}" - packages.each do |package| - Rails.logger.info "> Package: #{package[:Package]}" - #Rails.logger.debug "Fetching package informaton from the database" - - if package_blacklisted? package - # Should the package get removed from the database? - if REMOVE_BLACKLISTED_PACKAGE - db_package = Package.find_by name: package[:Package] - if db_package - Rails.logger.info "Removing blacklisted package '#{package[:Package]}' from database" - db_package.destroy - end - end - - next - end # if blacklisted - - db_package = Package.find_by name: package[:Package] - unless db_package - Rails.logger.debug "No such package in our database." + release.components.split.each do |component| + Rails.logger.info "> Component: #{component}" + release.architectures.split.each do |architecture| + Rails.logger.info ">> Architecture: #{architecture}" + # Check if this component and architecture is available on this mirror + packages = release.packages(component, architecture) + unless packages + Rails.logger.error "No packages for component #{component} on architecture #{architecture} found on this mirror" next end - Rails.logger.debug "Found in database: #{db_package.id}" - update_data(package, db_package) - end # package.each + Rails.logger.info "Packages file for #{component} on #{architecture} found." + Rails.logger.debug "Got: #{packages}" + packages.each do |package| + Rails.logger.info "> Package: #{package[:Package]}" + #Rails.logger.debug "Fetching package informaton from the database" - end # architectures.each - end # components.each + if package_blacklisted? package + # Should the package get removed from the database? + if REMOVE_BLACKLISTED_PACKAGE + db_package = Package.find_by name: package[:Package] + if db_package + Rails.logger.info "Removing blacklisted package '#{package[:Package]}' from database" + db_package.destroy + end + end - Rails.logger.info "Done parsing #{repository[:url]} repository." - Rails.logger.info "--------------------------------------------" - end # repositories.each + next + end # if blacklisted -end # task + db_package = Package.find_by name: package[:Package] + unless db_package + Rails.logger.debug "No such package in our database." + next + end + + Rails.logger.debug "Found in database: #{db_package.id}" + update_data(package, db_package) + end # package.each + + end # architectures.each + end # components.each + + Rails.logger.info "Done parsing #{repository[:url]} repository." + Rails.logger.info "--------------------------------------------" + end # repositories.each + + end # task + + + desc "List configured DEB repositories" + + task :list_deb_repos => :environment do + repositories = Rails.configuration.package_sources + Rails.logger = Logger.new(STDOUT) + Rails.logger.level = Logger::INFO + + Rails.logger.info "Listing configured DEB repositories" + + repositories.each do |repository| + Rails.logger.info "Fetching Release file for repository: #{repository[:url]} with components: #{repository[:components]}" + release = DebImporter::Release.new(repository[:url], repository[:components]) + Rails.logger.info "> Supported architectures are: #{release.architectures}" + Rails.logger.info "> Supported components are: #{release.components}" + + release.components.split.each do |component| + Rails.logger.info "> Component: #{component}" + release.architectures.split.each do |architecture| + Rails.logger.info ">> Architecture: #{architecture}" + # Check if this component and architecture is available on this mirror + packages = release.packages(component, architecture) + if packages + Rails.logger.info "#{packages.count} packages found." + else + Rails.logger.info "No packages." + end + end # architectures.each + end # components.each + + end # repositories.each + + end # task + +end # namespace # Update the information about a package in the database def update_data(package, db_package)