osdn-cli 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/osdn/cli.rb +27 -3
- data/lib/osdn/cli/command/frs_base.rb +80 -0
- data/lib/osdn/cli/command/frs_mkdirs.rb +1 -1
- data/lib/osdn/cli/command/frs_upload.rb +6 -60
- data/lib/osdn/cli/command/login.rb +1 -1
- data/lib/osdn/cli/command/package.rb +6 -39
- data/lib/osdn/cli/command/release.rb +91 -0
- data/lib/osdn/cli/command/relfile.rb +123 -0
- data/lib/osdn/cli/overrides.rb +16 -0
- data/lib/osdn/cli/runner.rb +2 -2
- data/lib/osdn/cli/version.rb +1 -1
- metadata +6 -3
- data/lib/osdn/cli/common.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32c466e6ff582c2e2ae91f4e1fc455e34630828e
|
4
|
+
data.tar.gz: 66080054808d8d1e077b95955e0dddac754159d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82f165bb2dd2afda2f954fbbeb228e498b41fd9e723dd593bb01c6a4f62724b940bc3058a82e2fb0801c4672959bd5c8b407f5b192ab444eb2f5725b75b815c3
|
7
|
+
data.tar.gz: 2302b89c7b4cb842b798cbb72103183c8a17078163c1387eacbf29a3b09775eee17b7a500a5e382f0252394ef9cfb9c2acb952456934029b1e560f3a57d9e6cb
|
data/lib/osdn/cli.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "osdn/cli/version"
|
2
2
|
require "osdn/cli/runner"
|
3
|
+
require "osdn/cli/overrides"
|
3
4
|
require 'getoptlong'
|
4
5
|
require 'logger'
|
5
6
|
require 'pathname'
|
@@ -8,6 +9,7 @@ require 'fileutils'
|
|
8
9
|
require 'osdn-client'
|
9
10
|
require 'hashie'
|
10
11
|
require 'json'
|
12
|
+
require 'digest'
|
11
13
|
|
12
14
|
module OSDN
|
13
15
|
module CLI
|
@@ -19,13 +21,23 @@ module OSDN
|
|
19
21
|
def client_secret
|
20
22
|
@@client_secret
|
21
23
|
end
|
22
|
-
|
24
|
+
|
25
|
+
@@_show_progress = false
|
26
|
+
def _show_progress
|
27
|
+
@@_show_progress
|
28
|
+
end
|
29
|
+
def _show_progress=(v)
|
30
|
+
@@_show_progress = v
|
31
|
+
end
|
32
|
+
|
33
|
+
module_function :client_id, :client_secret,
|
34
|
+
:_show_progress, :_show_progress=
|
23
35
|
|
24
36
|
module Command
|
25
37
|
autoload :Login, 'osdn/cli/command/login'
|
26
38
|
autoload :Package, 'osdn/cli/command/package'
|
27
|
-
|
28
|
-
|
39
|
+
autoload :Release, 'osdn/cli/command/release'
|
40
|
+
autoload :Relfile, 'osdn/cli/command/relfile'
|
29
41
|
autoload :FrsMkdirs, 'osdn/cli/command/frs_mkdirs'
|
30
42
|
autoload :FrsUpload, 'osdn/cli/command/frs_upload'
|
31
43
|
|
@@ -155,6 +167,18 @@ module OSDN
|
|
155
167
|
def update_variables(dir, vars)
|
156
168
|
write_variables(load_variables(dir, false).merge(vars), dir)
|
157
169
|
end
|
170
|
+
|
171
|
+
private
|
172
|
+
def hexdigest(klass, file)
|
173
|
+
fio = file.open
|
174
|
+
dig = klass.new
|
175
|
+
while buf = fio.read(1024*1024) and buf.length > 0
|
176
|
+
dig << buf
|
177
|
+
end
|
178
|
+
fio.close
|
179
|
+
dig.hexdigest
|
180
|
+
end
|
181
|
+
|
158
182
|
end
|
159
183
|
|
160
184
|
class Ping < Base
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module OSDN; module CLI; module Command
|
2
|
+
class FrsBase < Base
|
3
|
+
def run
|
4
|
+
update_token
|
5
|
+
process_options
|
6
|
+
command = ARGV.shift || 'list'
|
7
|
+
if !command || command.empty?
|
8
|
+
logger.fatal "subcommand is missing."
|
9
|
+
help
|
10
|
+
return
|
11
|
+
end
|
12
|
+
if self.respond_to? command
|
13
|
+
self.send command
|
14
|
+
else
|
15
|
+
logger.fatal "Invalid subcommand: #{command}"
|
16
|
+
help
|
17
|
+
return
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def process_options
|
22
|
+
raise NotImplementedError
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def target_proj
|
27
|
+
@target_proj and return @target_proj
|
28
|
+
vars = load_variables
|
29
|
+
vars.project && !vars.project.empty? and
|
30
|
+
return vars.project
|
31
|
+
logger.fatal "No target project is specified."
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
35
|
+
def target_package
|
36
|
+
@target_package and return @target_package
|
37
|
+
vars = load_variables
|
38
|
+
vars.package_id && !vars.package_id.empty? and
|
39
|
+
return vars.package_id
|
40
|
+
logger.fatal "No target package is specified."
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
|
44
|
+
def target_release
|
45
|
+
@target_release and return @target_release
|
46
|
+
vars = load_variables
|
47
|
+
vars.release_id && !vars.release_id.empty? and
|
48
|
+
return vars.release_id
|
49
|
+
logger.fatal "No target release is specified."
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
|
53
|
+
def api
|
54
|
+
OSDNClient::ProjectApi.new
|
55
|
+
end
|
56
|
+
|
57
|
+
def format_object(o, children = nil)
|
58
|
+
if format == 'json'
|
59
|
+
o.to_hash.to_json
|
60
|
+
else
|
61
|
+
children_str = ''
|
62
|
+
children and
|
63
|
+
children_str = ", #{[*o.send(children)].count} #{children}"
|
64
|
+
"##{o.id} #{o.name} (#{o.visibility}#{children_str})\n #{o.url}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def format_release(r)
|
69
|
+
format_object(r, :files)
|
70
|
+
end
|
71
|
+
|
72
|
+
def format_package(p)
|
73
|
+
format_object(p, :releases)
|
74
|
+
end
|
75
|
+
|
76
|
+
def format_file(f)
|
77
|
+
format_object(f)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end; end; end
|
@@ -33,7 +33,7 @@ module OSDN; module CLI; module Command
|
|
33
33
|
|
34
34
|
logger.debug "Getting Package list..."
|
35
35
|
packages = api.list_packages target_proj
|
36
|
-
logger.debug "Making each package
|
36
|
+
logger.debug "Making each package directory"
|
37
37
|
|
38
38
|
packages.each do |package|
|
39
39
|
pname = fsname(package.name)
|
@@ -1,46 +1,3 @@
|
|
1
|
-
require 'digest'
|
2
|
-
require 'ethon'
|
3
|
-
|
4
|
-
module OSDN; module CLI; module Command
|
5
|
-
class FrsUpload < Base
|
6
|
-
@@_show_progress = false
|
7
|
-
def self._show_progress
|
8
|
-
@@_show_progress
|
9
|
-
end
|
10
|
-
def self._show_progress=(v)
|
11
|
-
need_reset = (!!@@_show_progress != !!v)
|
12
|
-
@@_show_progress = v
|
13
|
-
need_reset and _reset_all_typhoeus_pool
|
14
|
-
end
|
15
|
-
|
16
|
-
def self._reset_all_typhoeus_pool
|
17
|
-
first_easyid = nil
|
18
|
-
while true
|
19
|
-
e = Typhoeus::Pool.get
|
20
|
-
Typhoeus::Pool.release(e)
|
21
|
-
e.__id__ == first_easyid and break
|
22
|
-
first_easyid ||= e.__id__
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end; end; end
|
27
|
-
|
28
|
-
module Ethon
|
29
|
-
class Easy
|
30
|
-
module Callbacks
|
31
|
-
alias_method :set_callbacks_orig, :set_callbacks
|
32
|
-
def set_callbacks
|
33
|
-
set_callbacks_orig
|
34
|
-
if OSDN::CLI::Command::FrsUpload._show_progress
|
35
|
-
Curl.set_option(:noprogress, false, handle)
|
36
|
-
else
|
37
|
-
Curl.set_option(:noprogress, true, handle)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
1
|
module OSDN; module CLI; module Command
|
45
2
|
class FrsUpload < Base
|
46
3
|
def help
|
@@ -87,7 +44,7 @@ module OSDN; module CLI; module Command
|
|
87
44
|
@target_dir = Pathname.new(ARGV.shift || '.')
|
88
45
|
proj_info = api.get_project target_proj # check project existance
|
89
46
|
|
90
|
-
Pathname.glob(@target_dir+'*').each do |pdir|
|
47
|
+
Pathname.glob(@target_dir+'*').sort.each do |pdir|
|
91
48
|
unless load_variables(pdir).package_id
|
92
49
|
logger.info "Createing new package '#{pdir.basename}'"
|
93
50
|
if @dry_run
|
@@ -99,7 +56,7 @@ module OSDN; module CLI; module Command
|
|
99
56
|
$stdout.puts "New package '#{pinfo.name}' has been created; #{pinfo.url}"
|
100
57
|
end
|
101
58
|
|
102
|
-
Pathname.glob(pdir + '*').each do |rdir|
|
59
|
+
Pathname.glob(pdir + '*').sort.each do |rdir|
|
103
60
|
vars = load_variables(rdir)
|
104
61
|
rinfo = nil
|
105
62
|
if vars.release_id
|
@@ -115,7 +72,7 @@ module OSDN; module CLI; module Command
|
|
115
72
|
$stdout.puts "New release '#{rinfo.name}' has been created; #{rinfo.url}"
|
116
73
|
end
|
117
74
|
|
118
|
-
Pathname.glob(rdir + '*').each do |file|
|
75
|
+
Pathname.glob(rdir + '*').sort.each do |file|
|
119
76
|
if file.directory?
|
120
77
|
logger.error "Skip direcotry #{file}"
|
121
78
|
next
|
@@ -138,16 +95,16 @@ module OSDN; module CLI; module Command
|
|
138
95
|
finfo = Hashie::Mash.new id: '(dry-run)', url: '(dry-run)'
|
139
96
|
else
|
140
97
|
logger.level <= Logger::INFO and
|
141
|
-
|
98
|
+
OSDN::CLI._show_progress = true
|
142
99
|
fio = file.open
|
143
100
|
logger.info "Starting upload #{file}..."
|
144
101
|
finfo = api.create_release_file target_proj, target_package(rdir), target_release(rdir), fio, visibility: @visibility
|
145
102
|
fio.close
|
146
|
-
|
103
|
+
OSDN::CLI._show_progress = false
|
147
104
|
if digests.find { |type, dig| dig != finfo.send("digest_#{type}") }
|
148
105
|
logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
|
149
106
|
else
|
150
|
-
logger.info "Upload
|
107
|
+
logger.info "Upload complete."
|
151
108
|
end
|
152
109
|
end
|
153
110
|
$stdout.puts "New file '#{file}' has been uploaded; #{finfo.url}"
|
@@ -192,16 +149,5 @@ module OSDN; module CLI; module Command
|
|
192
149
|
def api
|
193
150
|
OSDNClient::ProjectApi.new
|
194
151
|
end
|
195
|
-
|
196
|
-
def hexdigest(klass, file)
|
197
|
-
fio = file.open
|
198
|
-
dig = klass.new
|
199
|
-
while buf = fio.read(1024*1024) and buf.length > 0
|
200
|
-
dig << buf
|
201
|
-
end
|
202
|
-
fio.close
|
203
|
-
dig.hexdigest
|
204
|
-
end
|
205
|
-
|
206
152
|
end
|
207
153
|
end; end; end
|
@@ -30,7 +30,7 @@ module OSDN; module CLI; module Command
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def launch_brwoser(url)
|
33
|
-
puts "Access
|
33
|
+
puts "Access following URL to get auth code;\n#{url}"
|
34
34
|
if ENV['DISPLAY']
|
35
35
|
%w(/usr/bin/xdg-open /usr/bin/X11/xdg-open /usr/local/bin/xdg-open
|
36
36
|
/usr/bin/x-www-browser /usr/bin/firefox /usr/local/bin/firefox
|
@@ -1,6 +1,8 @@
|
|
1
|
+
require 'osdn/cli/command/frs_base'
|
2
|
+
|
1
3
|
module OSDN; module CLI; module Command
|
2
|
-
class Package <
|
3
|
-
def
|
4
|
+
class Package < FrsBase
|
5
|
+
def help
|
4
6
|
puts "#{$0} package [opts] [list]"
|
5
7
|
puts "#{$0} package [opts] create <new-package-name>"
|
6
8
|
puts "#{$0} package [opts] update <numeric-package-id> [name]"
|
@@ -15,8 +17,7 @@ module OSDN; module CLI; module Command
|
|
15
17
|
"Manipulate release package of project"
|
16
18
|
end
|
17
19
|
|
18
|
-
def
|
19
|
-
update_token
|
20
|
+
def process_options
|
20
21
|
opts = GetoptLong.new(
|
21
22
|
[ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
|
22
23
|
[ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
|
@@ -38,25 +39,12 @@ module OSDN; module CLI; module Command
|
|
38
39
|
@visibility = arg
|
39
40
|
end
|
40
41
|
end
|
41
|
-
command = ARGV.shift || 'list'
|
42
|
-
if !command || command.empty?
|
43
|
-
logger.fatal "subcommand is missing."
|
44
|
-
help
|
45
|
-
return
|
46
|
-
end
|
47
|
-
if self.respond_to? command
|
48
|
-
self.send command
|
49
|
-
else
|
50
|
-
logger.fatal "Invalid subcommand: #{command}"
|
51
|
-
help
|
52
|
-
return
|
53
|
-
end
|
54
42
|
end
|
55
43
|
|
56
44
|
def list
|
57
45
|
list = api.list_packages target_proj
|
58
46
|
if format == 'json'
|
59
|
-
puts list.to_json
|
47
|
+
puts list.map{|i| i.to_hash}.to_json
|
60
48
|
else
|
61
49
|
list.each do |p|
|
62
50
|
puts format_package(p)
|
@@ -93,26 +81,5 @@ module OSDN; module CLI; module Command
|
|
93
81
|
logger.info "Package #{target_id} has been deleted."
|
94
82
|
end
|
95
83
|
|
96
|
-
private
|
97
|
-
def target_proj
|
98
|
-
@target_proj and return @target_proj
|
99
|
-
vars = load_variables
|
100
|
-
vars.project && !vars.project.empty? and
|
101
|
-
return vars.project
|
102
|
-
logger.fatal "No target project is specified."
|
103
|
-
exit
|
104
|
-
end
|
105
|
-
|
106
|
-
def api
|
107
|
-
OSDNClient::ProjectApi.new
|
108
|
-
end
|
109
|
-
|
110
|
-
def format_package(p)
|
111
|
-
if format == 'json'
|
112
|
-
p.to_json
|
113
|
-
else
|
114
|
-
"##{p.id} #{p.name} (#{p.visibility}, #{[*p.releases].count} releases)\n #{p.url}"
|
115
|
-
end
|
116
|
-
end
|
117
84
|
end
|
118
85
|
end; end; end
|
@@ -0,0 +1,91 @@
|
|
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=<project> Target package (numeric id)"
|
14
|
+
puts " -v --visibility=<public|private|hidden>"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.description
|
18
|
+
"Manipulate release (includes by package) 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
|
+
target_id = ARGV.shift
|
75
|
+
args = {name: ARGV.shift}
|
76
|
+
if @visibility
|
77
|
+
args[:visibility] = @visibility
|
78
|
+
end
|
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)
|
82
|
+
end
|
83
|
+
|
84
|
+
def delete
|
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."
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end; end; end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'osdn/cli/command/frs_base'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module OSDN; module CLI; module Command
|
5
|
+
class Relfile < FrsBase
|
6
|
+
def help
|
7
|
+
puts "#{$0} relfile [opts] [list]"
|
8
|
+
puts "#{$0} relfile [opts] create <target-file>"
|
9
|
+
puts "#{$0} relfile [opts] update <numeric-file-id>"
|
10
|
+
puts "#{$0} relfile [opts] delete <numeric-file-id>"
|
11
|
+
puts "Options:"
|
12
|
+
puts " -f --format=<pretty|json> Set output format"
|
13
|
+
puts " -p --project=<project> Target project (numeric id or name)"
|
14
|
+
puts " --package=<project> Target package (numeric id)"
|
15
|
+
puts " --release=<project> Target release (numeric id)"
|
16
|
+
puts " -v --visibility=<public|private|hidden>"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.description
|
20
|
+
"Manipulate release (includes by package) of project"
|
21
|
+
end
|
22
|
+
|
23
|
+
def process_options
|
24
|
+
opts = GetoptLong.new(
|
25
|
+
[ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
|
26
|
+
[ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
|
27
|
+
[ '--package', GetoptLong::REQUIRED_ARGUMENT ],
|
28
|
+
[ '--release', GetoptLong::REQUIRED_ARGUMENT ],
|
29
|
+
[ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
|
30
|
+
)
|
31
|
+
opts.each do |opt, arg|
|
32
|
+
case opt
|
33
|
+
when '--format'
|
34
|
+
arg == 'json' and
|
35
|
+
self.format = arg
|
36
|
+
when '--project'
|
37
|
+
arg.empty? or
|
38
|
+
@target_proj = arg
|
39
|
+
when '--package'
|
40
|
+
arg.empty? or
|
41
|
+
@target_package = arg
|
42
|
+
when '--release'
|
43
|
+
arg.empty? or
|
44
|
+
@target_release = arg
|
45
|
+
when '--visibility'
|
46
|
+
unless %w(public private hidden).member?(arg)
|
47
|
+
logger.fatal "Invalid visibility status: #{arg}"
|
48
|
+
exit
|
49
|
+
end
|
50
|
+
@visibility = arg
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def list
|
56
|
+
release = api.get_release target_proj, target_package, target_release
|
57
|
+
list = release.files
|
58
|
+
if format == 'json'
|
59
|
+
puts list.map{|i| i.to_hash}.to_json
|
60
|
+
else
|
61
|
+
list.each do |f|
|
62
|
+
puts format_file(f)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def create
|
68
|
+
filename = ARGV.shift
|
69
|
+
if !filename
|
70
|
+
logger.fatal "Target filename is missing."
|
71
|
+
help
|
72
|
+
return
|
73
|
+
end
|
74
|
+
file = Pathname('.') + filename
|
75
|
+
logger.debug "Calculating digest for #{file}..."
|
76
|
+
digests = {
|
77
|
+
sha256: hexdigest(Digest::SHA256, file),
|
78
|
+
sha1: hexdigest(Digest::SHA1, file),
|
79
|
+
md5: hexdigest(Digest::MD5, file),
|
80
|
+
}
|
81
|
+
fio = file.open
|
82
|
+
logger.level <= Logger::INFO and
|
83
|
+
OSDN::CLI._show_progress = true
|
84
|
+
logger.info "Starting upload #{file}..."
|
85
|
+
f = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
|
86
|
+
fio.close
|
87
|
+
OSDN::CLI._show_progress = false
|
88
|
+
if digests.find { |type, dig| dig != f.send("digest_#{type}") }
|
89
|
+
logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
|
90
|
+
else
|
91
|
+
logger.info "Upload complete."
|
92
|
+
end
|
93
|
+
puts format_file(f)
|
94
|
+
end
|
95
|
+
|
96
|
+
def update
|
97
|
+
target_id = ARGV.shift
|
98
|
+
if !target_id
|
99
|
+
logger.fatal "Target file ID is missing."
|
100
|
+
help
|
101
|
+
return
|
102
|
+
end
|
103
|
+
if @visibility.nil?
|
104
|
+
logger.fatal "Visibility status is missing. Use '-v <public|private|hidden>'."
|
105
|
+
return
|
106
|
+
end
|
107
|
+
f = api.update_release_file target_proj, target_package, target_release, target_id, visibility: @visibility
|
108
|
+
logger.info "file #{target_id} has been updated."
|
109
|
+
puts format_file(f)
|
110
|
+
end
|
111
|
+
|
112
|
+
def delete
|
113
|
+
target_id = ARGV.shift
|
114
|
+
if !target_id
|
115
|
+
logger.fatal "Target file ID is missing."
|
116
|
+
help
|
117
|
+
return
|
118
|
+
end
|
119
|
+
f = api.delete_release_file target_proj, target_package, target_release, target_id
|
120
|
+
logger.info "file #{target_id} has been deleted."
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end; end; end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'typhoeus/easy_factory'
|
2
|
+
|
3
|
+
module Typhoeus
|
4
|
+
class EasyFactory
|
5
|
+
alias_method :get_orig, :get
|
6
|
+
def get(*args)
|
7
|
+
easy = get_orig(*args)
|
8
|
+
if OSDN::CLI._show_progress
|
9
|
+
Ethon::Curl.set_option(:noprogress, false, easy.handle)
|
10
|
+
else
|
11
|
+
Ethon::Curl.set_option(:noprogress, true, easy.handle)
|
12
|
+
end
|
13
|
+
easy
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/osdn/cli/runner.rb
CHANGED
@@ -7,7 +7,7 @@ module OSDN
|
|
7
7
|
class Runner
|
8
8
|
def initialize
|
9
9
|
@logger = Logger.new(STDERR)
|
10
|
-
@logger.level = Logger::
|
10
|
+
@logger.level = Logger::INFO
|
11
11
|
@logger.formatter = proc { |severity, time, progname, msg|
|
12
12
|
"[%s] %s\n" % [severity, msg]
|
13
13
|
}
|
@@ -88,7 +88,7 @@ module OSDN
|
|
88
88
|
elsif err["error_description"]
|
89
89
|
logger.fatal err["error_description"]
|
90
90
|
else
|
91
|
-
logger.fatal "Command failed: #{e.
|
91
|
+
logger.fatal "Command failed by ApiError: #{e.response_body}"
|
92
92
|
end
|
93
93
|
rescue
|
94
94
|
logger.fatal "Command failed: #{e.inspect}"
|
data/lib/osdn/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: osdn-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OSDN
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -91,11 +91,14 @@ files:
|
|
91
91
|
- exe/osdn
|
92
92
|
- lib/osdn-cli.rb
|
93
93
|
- lib/osdn/cli.rb
|
94
|
+
- lib/osdn/cli/command/frs_base.rb
|
94
95
|
- lib/osdn/cli/command/frs_mkdirs.rb
|
95
96
|
- lib/osdn/cli/command/frs_upload.rb
|
96
97
|
- lib/osdn/cli/command/login.rb
|
97
98
|
- lib/osdn/cli/command/package.rb
|
98
|
-
- lib/osdn/cli/
|
99
|
+
- lib/osdn/cli/command/release.rb
|
100
|
+
- lib/osdn/cli/command/relfile.rb
|
101
|
+
- lib/osdn/cli/overrides.rb
|
99
102
|
- lib/osdn/cli/runner.rb
|
100
103
|
- lib/osdn/cli/version.rb
|
101
104
|
homepage: https://osdn.jp/projects/osdn-codes/wiki/CommandLineInterface
|