class S3Repo::Repo
Repo
object, represents an Arch repo inside an S3 bucket
Public Instance Methods
add_packages(paths)
click to toggle source
# File lib/s3repo/repo.rb, line 16 def add_packages(paths) paths.select! { |path| upload_package(path) } metadata.add_packages(paths) unless paths.empty? templates.update! unless paths.empty? end
build_packages(paths)
click to toggle source
# File lib/s3repo/repo.rb, line 8 def build_packages(paths) paths.each do |path| dir = File.dirname(path) puts "Building #{File.basename(dir)}" Dir.chdir(dir) { run "makepkg #{@options[:makepkg_flags]}" } end end
include?(key)
click to toggle source
# File lib/s3repo/repo.rb, line 44 def include?(key) !packages.find { |x| x.key == key }.nil? end
packages()
click to toggle source
# File lib/s3repo/repo.rb, line 36 def packages package_cache.cache { parse_objects(/.*\.pkg\.tar\.xz$/) } end
prune_files()
click to toggle source
# File lib/s3repo/repo.rb, line 27 def prune_files if orphans.empty? puts 'No orphaned files' return end puts "Pruning files: #{orphans.join(', ')}" client.delete_objects(delete: { objects: orphans.map { |x| { key: x } } }) end
remove_packages(packages)
click to toggle source
# File lib/s3repo/repo.rb, line 22 def remove_packages(packages) metadata.remove_packages(packages) templates.update! end
signatures()
click to toggle source
# File lib/s3repo/repo.rb, line 40 def signatures parse_objects(/.*\.pkg\.tar\.xz\.sig$/) end
Private Instance Methods
metadata()
click to toggle source
# File lib/s3repo/repo.rb, line 66 def metadata @options[:metadata] ||= Metadata.new(@options) end
orphans()
click to toggle source
# File lib/s3repo/repo.rb, line 60 def orphans (packages + signatures).map(&:key).reject do |x| metadata.packages.include? x.reverse.split('-', 2).last.reverse end end
package_cache()
click to toggle source
# File lib/s3repo/repo.rb, line 78 def package_cache @package_cache ||= BasicCache::TimeCache.new lifetime: 60 end
parse_objects(regex)
click to toggle source
# File lib/s3repo/repo.rb, line 82 def parse_objects(regex) client.list_objects(bucket: bucket).contents.select { |x| x.key =~ regex } end
signer()
click to toggle source
# File lib/s3repo/repo.rb, line 70 def signer @options[:signer] ||= Signer.new(@options) end
templates()
click to toggle source
# File lib/s3repo/repo.rb, line 74 def templates @templates ||= Templates.new(@options) end
upload_package(path)
click to toggle source
# File lib/s3repo/repo.rb, line 50 def upload_package(path) key = File.basename(path) return false if include? key sig_path = signer.sign(path) sig_key = key + '.sig' client.upload_file(sig_key, sig_path) if @options[:sign_packages] client.upload_file(key, path) true end