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