bin/s3repo in s3repo-1.0.0 vs bin/s3repo in s3repo-2.0.0

- old
+ new

@@ -1,51 +1,74 @@ #!/usr/bin/env ruby require 's3repo' require 'mercenary' +require 'yaml' +require 'cymbal' def find(pattern, limits) Dir.glob(pattern).select { |x| !limits || limits.include?(File.dirname(x)) } end +def common_opts(cmd) + cmd.option :config_file, '-c', '--config FILE', 'Path of config file' +end + +def load_config(file) + file ||= 'config.yml' + file = File.expand_path(file) + raise("Config file not found: #{file}") unless File.exist? file + Cymbal.symbolize YAML.safe_load(File.read(file)) +end + +def repo(options) + config = load_config(options[:config_file]) + S3Repo.new(config) +end + +# rubocop:disable Metrics/BlockLength Mercenary.program(:s3repo) do |p| p.version S3Repo::VERSION p.description 'Package management tool for Archlinux repos' p.syntax 's3repo <subcommand> [args]' p.command(:build) do |c| + common_opts(c) c.syntax 'build [package...]' c.description 'Build package files from PKGBUILDs' - c.action do |args, _| - S3Repo.new.build_packages find('*/PKGBUILD', args), ENV['MAKEPKG_FLAGS'] + c.action do |args, opts| + repo(opts).build_packages find('*/PKGBUILD', args) end end p.command(:upload) do |c| + common_opts(c) c.syntax 'upload [package...]' c.description 'Upload packages to repo' - c.action do |args, _| - S3Repo.new.add_packages find('*/*.pkg.tar.xz', args) + c.action do |args, opts| + repo(opts).add_packages find('*/*.pkg.tar.xz', args) end end p.command(:remove) do |c| + common_opts(c) c.syntax 'remove [package...]' c.description 'Remove packages from repo DB' - c.action do |args, _| - S3Repo.new.remove_packages args + c.action do |args, opts| + repo(opts).remove_packages args end end p.command(:prune) do |c| + common_opts(c) c.syntax 'prune' c.description 'Prune orphaned files from the repo' - c.action do - S3Repo.new.prune_files + c.action do |_, opts| + repo(opts).prune_files end end p.action do puts p