Added "debshots" namespace and list_deb_repos task

This commit is contained in:
Christoph Haas 2015-04-22 21:45:36 +02:00
parent 1034afa92d
commit 8b8073bdd0

View file

@ -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)