module RPM::Repository::API
Public user api of RPM::Repository
Should'n changed frequently
Public Instance Methods
add_package!(package)
click to toggle source
Add single package to repository
# File lib/repository_api.rb, line 7 def add_package! package add_packages! [package] end
add_packages!(packages)
click to toggle source
Add packages to repository
# File lib/repository_api.rb, line 12 def add_packages! packages @logger.info "adding packages" duplicated_packages = [] rebuild_with { packages.each { |package| raise ArgumentError, "Package expected, but #{package.class}" unless package.is_a? RPM::Package raise RuntimeError, "Package already exist!" if contains? package package.duplicate_to "#{@base_dir.path}/Packages" #hack that add package to cache. Escape package brain splitting (two packages with the same file) if package.digests[get_checksum_type.to_sym] @packages_cache[package.digests[get_checksum_type.to_sym]] = package end duplicated_packages.push package } } rescue Exception => e rebuild_with { duplicated_packages.each { |package| package.deduplicate_undo "#{@base_dir.path}/Packages" } } raise e end
assimilate!(alien_package)
click to toggle source
Try to expand package URIs with own Return true if package expanded, false otherwise
# File lib/repository_api.rb, line 83 def assimilate! alien_package if contains? alien_package alien_package.join! get_own(alien_package) synchronize { @packages_cache[alien_package.digests[get_checksum_type.to_sym]] = alien_package } return true else return false end end
clean()
click to toggle source
Cleanup temporary files
# File lib/repository_api.rb, line 106 def clean @logger.info "cleaning repo" synchronize { @status = :cleaning FileUtils::rm_rf @tmp_dir.path FileUtils::mkdir @tmp_dir.path @status = :ok } end
contains?(alien_package)
click to toggle source
Return true if repository contains package with same signature
# File lib/repository_api.rb, line 76 def contains? alien_package not get_packages_list.select{ |package| package.same_as? alien_package }.empty? end
Also aliased as: include?
destroy!()
click to toggle source
Remove repository files
# File lib/repository_api.rb, line 94 def destroy! @logger.info "destroying repo" return @status if @status == :destroyed synchronize { @status = :destroying clean FileUtils::rm_rf @base_dir.path @status = :destroyed } end
get_local_conf()
click to toggle source
Return template for YUM configuration
# File lib/repository_api.rb, line 117 def get_local_conf " [#{@name}] name=#{@name} baseurl=file:///#{@base_dir.path} gpgcheck=0 enabled=0 " end
get_packages_list()
click to toggle source
Return array of packages
# File lib/repository_api.rb, line 128 def get_packages_list synchronize { validate_packages_cache && get_packages_from_cache } end
get_packages_list_by(name_expression)
click to toggle source
Return packages array that match parameter
# File lib/repository_api.rb, line 71 def get_packages_list_by name_expression get_packages_list.select{ |package| package.get_default_name[name_expression] } end
parse_out_packages!(name_expression)
click to toggle source
Remove packages by regex Return list with removed URL's
# File lib/repository_api.rb, line 66 def parse_out_packages! name_expression return remove_packages! get_packages_list_by(name_expression) end
rebuild()
click to toggle source
Public and safe realization of rebuilding - just rebuild repository
# File lib/repository_api.rb, line 133 def rebuild rebuild_with end
remove_package!(package)
click to toggle source
Remove package
# File lib/repository_api.rb, line 37 def remove_package! package @logger.info "removing package" rebuild_with { raise ArgumentError, "No such package in repository: #{package.get_default_name}" unless contains? package get_own(package).deduplicate_undo @base_dir.path } end
remove_packages!(packages)
click to toggle source
Remove packages Return two arrays: {:removed => […], :skipped => […]}
# File lib/repository_api.rb, line 47 def remove_packages! packages @logger.info "removing packages" rezult = {:removed => [], :skipped => []} rebuild_with { packages.each { |package| if contains? package get_own(package).deduplicate_undo @base_dir.path rezult[:removed].push package else rezult[:skipped].push package @logger.warn "Package #{package} skipped: no such package in repository" end } } return rezult end
Private Instance Methods
get_own(package)
click to toggle source
Return Package
from current repository Method not public because it brings packages split-brain (two same package into runtime)
# File lib/repository_api.rb, line 140 def get_own package same_packages = get_packages_list.select { |repo_package| repo_package.same_as? package } case same_packages.count when 1 return same_packages.first when 0 return nil else raise RuntimeError, "More than one #{package.get_default_name} package in repository" end end