1 require 'osdn/cli/command/frs_base'
3 module OSDN; module CLI; module Command
4 class Release < FrsBase
6 puts "#{$0} release [opts] [list]"
7 puts "#{$0} release [opts] create <new-release-name>"
8 puts "#{$0} release [opts] update <numeric-release-id> [name]"
9 puts "#{$0} release [opts] delete <numeric-release-id>"
11 puts " -f --format=<pretty|json> Set output format"
12 puts " -p --project=<project> Target project (numeric id or name)"
13 puts " --package=<package-id> Target package (numeric id)"
14 puts " -v --visibility=<public|private|hidden>"
18 "Manipulate frs releases of project"
22 opts = GetoptLong.new(
23 [ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
24 [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
25 [ '--package', GetoptLong::REQUIRED_ARGUMENT ],
26 [ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
28 opts.each do |opt, arg|
40 unless %w(public private hidden).member?(arg)
41 logger.fatal "Invalid visibility status: #{arg}"
50 package = api.get_package target_proj, target_package
51 list = package.releases
53 puts list.map{|i| i.to_hash}.to_json
56 puts format_release(r)
64 logger.fatal "Release name is missing."
68 r = api.create_release target_proj, target_package, name, visibility: @visibility
69 logger.info "New release has been created."
70 puts format_release(r)
74 target_id = ARGV.shift
75 args = {name: ARGV.shift}
77 args[:visibility] = @visibility
79 r = api.update_release target_proj, target_package, target_id, args
80 logger.info "Release #{target_id} has been updated."
81 puts format_release(r)
85 target_id = ARGV.shift
86 r = api.delete_release target_proj, target_package, target_id
87 logger.info "Release #{target_id} has been deleted."