+require 'osdn/cli/command/frs_base'
+
module OSDN; module CLI; module Command
- class Package < Base
+ class Package < FrsBase
def help
puts "#{$0} package [opts] [list]"
puts "#{$0} package [opts] create <new-package-name>"
- puts "#{$0} package [opts] update <numeric-package-id> [name]"
- puts "#{$0} package [opts] delete <numeric-package-id>"
+ puts "#{$0} package [opts] update [numeric-package-id] [name]"
+ puts "#{$0} package [opts] delete [numeric-package-id]"
puts "Options:"
puts " -f --format=<pretty|json> Set output format"
puts " -p --project=<project> Target project (numeric id or name)"
end
def self.description
- "Manipulate release package of project"
+ "Manipulate frs packages of project"
end
- def run
- update_token
+ def process_options
opts = GetoptLong.new(
[ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
[ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
@visibility = arg
end
end
- command = ARGV.shift || 'list'
- if !command || command.empty?
- logger.fatal "subcommand is missing."
- help
- return
- end
- if self.respond_to? command
- self.send command
- else
- logger.fatal "Invalid subcommand: #{command}"
- help
- return
- end
end
def list
list = api.list_packages target_proj
if format == 'json'
- puts list.to_json
+ puts list.map{|i| i.to_hash}.to_json
else
list.each do |p|
puts format_package(p)
end
def update
- target_id = ARGV.shift
- args = {name: ARGV.shift}
+ _set_package_id
+ args = {}
+ if ARGV[1].to_s != ""
+ args[:name] = ARGV[1]
+ end
if @visibility
args[:visibility] = @visibility
end
- p = api.update_package target_proj, target_id, args
- logger.info "Package #{target_id} has been updated."
+ logger.debug "Updating package #{target_package} as #{args.inspect}"
+ p = api.update_package target_proj, target_package, args
+ logger.info "Package #{target_package} has been updated."
puts format_package(p)
end
def delete
- target_id = ARGV.shift
- p = api.delete_package target_proj, target_id
- logger.info "Package #{target_id} has been deleted."
- end
-
- private
- def target_proj
- @target_proj and return @target_proj
- vars = load_variables
- vars.project && !vars.project.empty? and
- return vars.project
- logger.fatal "No target project is specified."
- exit
+ _set_package_id
+ p = api.delete_package target_proj, target_package
+ logger.info "Package #{target_package} has been deleted."
end
- def api
- OSDNClient::ProjectApi.new
+ def _set_package_id
+ return if ARGV[0].to_i == 0
+ @target_package = ARGV[0].to_i
end
- def format_package(p)
- if format == 'json'
- p.to_json
- else
- "##{p.id} #{p.name} (#{p.visibility}, #{[*p.releases].count} releases)\n #{p.url}"
- end
- end
end
end; end; end