1 module OSDN; module CLI; module Command
4 puts "#{$0} package [opts] [list]"
5 puts "#{$0} package [opts] create <new-package-name>"
6 puts "#{$0} package [opts] update <numeric-package-id> [name]"
7 puts "#{$0} package [opts] delete <numeric-package-id>"
9 puts " -f --format=<pretty|json> Set output format"
10 puts " -p --project=<project> Target project (numeric id or name)"
11 puts " -v --visibility=<public|private|hidden>"
15 "Manipulate release package of project"
20 opts = GetoptLong.new(
21 [ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
22 [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
23 [ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
25 opts.each do |opt, arg|
34 unless %w(public private hidden).member?(arg)
35 logger.fatal "Invalid visibility status: #{arg}"
41 command = ARGV.shift || 'list'
42 if !command || command.empty?
43 logger.fatal "subcommand is missing."
47 if self.respond_to? command
50 logger.fatal "Invalid subcommand: #{command}"
57 list = api.list_packages target_proj
62 puts format_package(p)
70 logger.fatal "Package name is missing."
74 p = api.create_package target_proj, name, visibility: @visibility
75 logger.info "New package has been created."
76 puts format_package(p)
80 target_id = ARGV.shift
81 args = {name: ARGV.shift}
83 args[:visibility] = @visibility
85 p = api.update_package target_proj, target_id, args
86 logger.info "Package #{target_id} has been updated."
87 puts format_package(p)
91 target_id = ARGV.shift
92 p = api.delete_package target_proj, target_id
93 logger.info "Package #{target_id} has been deleted."
98 @target_proj and return @target_proj
100 vars.project && !vars.project.empty? and
102 logger.fatal "No target project is specified."
107 OSDNClient::ProjectApi.new
110 def format_package(p)
114 "##{p.id} #{p.name} (#{p.visibility}, #{[*p.releases].count} releases)\n #{p.url}"