Sha256: c9e4f403b31b6efe74423c71198c120d06869fee14e33ac19c9b6b80eafbcc98

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

require 'fileutils'
require 'tempfile'

module S3Repo
  ##
  # Metadata object, represents repo's DB file
  class Metadata < Base
    def initialize(params = {})
      super
      FileUtils.mkdir_p db_dir
    end

    def add_packages(paths)
      @db_path = nil
      paths.each do |path|
        puts "Adding #{File.basename(path)} to repo.db"
        run("repo-add #{db_path} #{path}")
      end
      update!
    end

    def remove_packages(packages)
      @db_path = nil
      packages.each do |package|
        puts "Removing #{package} from repo.db"
        run("repo-remove #{db_path} #{package}")
      end
      update!
    end

    def update!
      client.upload!('repo.db', db_path)
      sign_db if ENV['S3REPO_SIGN_DB']
    end

    private

    def sign_db
      run "gpg --detach-sign --use-agent #{db_path}"
      client.upload!('repo.db.sig', "#{db_path}.sig")
    end

    def db_path
      @db_path ||= download_db
    end

    def download_db
      tmpfile = Tempfile.create(['repo', '.db.tar.xz'], db_dir)
      tmpfile << file_cache.serve('repo.db')
      tmpfile.close
      tmpfile.path
    end

    def db_dir
      @db_dir ||= File.absolute_path(
        @options[:tmpdir] || Cache::TMPDIRS.compact.first
      )
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
s3repo-0.3.1 lib/s3repo/metadata.rb
s3repo-0.3.0 lib/s3repo/metadata.rb