OSDN Git Service

Package and release command gets target from vars file.
[osdn-codes/osdn-cli.git] / lib / osdn / cli / command / release.rb
1 require 'osdn/cli/command/frs_base'
2
3 module OSDN; module CLI; module Command
4   class Release < FrsBase
5     def help
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]"
10       puts "Options:"
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>"
15     end
16
17     def self.description
18       "Manipulate frs releases of project"
19     end
20
21     def process_options
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 ],
27       )
28       opts.each do |opt, arg|
29         case opt
30         when '--format'
31           arg == 'json' and
32             self.format = arg
33         when '--project'
34           arg.empty? or
35             @target_proj = arg
36         when '--package'
37           arg.empty? or
38             @target_package = arg
39         when '--visibility'
40           unless %w(public private hidden).member?(arg)
41             logger.fatal "Invalid visibility status: #{arg}"
42             exit
43           end
44           @visibility = arg
45         end
46       end
47     end
48
49     def list
50       package = api.get_package target_proj, target_package
51       list = package.releases
52       if format == 'json'
53         puts list.map{|i| i.to_hash}.to_json
54       else
55         list.each do |r|
56           puts format_release(r)
57         end
58       end
59     end
60
61     def create
62       name = ARGV.shift
63       if !name
64         logger.fatal "Release name is missing."
65         help
66         return
67       end
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)
71     end
72
73     def update
74       _set_release_id
75       args = {}
76       if ARGV[1].to_s != ""
77         args[:name] = ARGV.shift
78       end
79       if @visibility
80         args[:visibility] = @visibility
81       end
82       logger.debug "Updating release #{target_release} as #{args.inspect}"
83       r = api.update_release target_proj, target_package, target_release, args
84       logger.info "Release #{target_release} has been updated."
85       puts format_release(r)
86     end
87
88     def delete
89       _set_release_id
90       r = api.delete_release target_proj, target_package, target_release
91       logger.info "Release #{target_release} has been deleted."
92     end
93
94     def _set_release_id
95       return if ARGV[0].to_i == 0
96       @target_release = ARGV[0].to_i
97     end
98   end
99 end; end; end