osdn-cli 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 711d2bde0ec7b6b4a631200c6eab8d7b719a8798
4
- data.tar.gz: 54f1852e3d5f9deff21a080e377ebfad19410579
2
+ SHA256:
3
+ metadata.gz: c9458c3957544b3d0486db50098cfb327870d0fc4a93be500699328756ffb8b4
4
+ data.tar.gz: c60b73446c9feb4216f74e86feb080b74dabfe966d640d70287a53a5e8a1348f
5
5
  SHA512:
6
- metadata.gz: d82079daa70bccb7f8e8aefea07aeeea5a7896c6bec160f249f7ea0d977c72e3bccb2b49d6a2a0323baf5b25ca24ae0f8414a05ea46832a01861b1ab752059dc
7
- data.tar.gz: 1376e42c75a7fb842951dc0cd11a089994566ac52a88c3a9ccd6d47e350911dd0809bcc4db237a5e928996c3a1c111d0948bf3c7b38c73d4deafa7596f92440a
6
+ metadata.gz: 752467db05db7fcc5685e7f7488f5760181aca25fb88f5ec1835dfff107f7700de30b12050c1331a3cca851ee542dfc1440a455a05d72b032a3bb410ee1df308
7
+ data.tar.gz: 64e8c11ee3a26cfa04e6f98150a195dda1a3cd45fcfb3716457d8cb636f6f2d0dd4ba33641af511815b1181dea352d792c6a98fcdae080f340684653167561b5
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ 2018-08-20 Tatsuki Sugiura <sugi@nemui.org>
2
+
3
+ * Fix to compat with API change; check file size instead of digest on upload
4
+ * Version 0.1.10
5
+
1
6
  2017-05-01 Tatsuki Sugiura <sugi@nemui.org>
2
7
 
3
8
  * Try to fix launching browser on login at Windows environment.
@@ -165,6 +165,13 @@ module OSDN
165
165
  logger.warn "Failed to load variables from #{path}; #{e.message}"
166
166
  end
167
167
  end
168
+ # Fix key conflicts
169
+ if vars['local_file_info']
170
+ vars['local_file_info'].each do |fname, finfo|
171
+ finfo.has_key?('size') or next
172
+ finfo['filesize'] = finfo.delete('size')
173
+ end
174
+ end
168
175
  logger.debug "Variables: #{vars.inspect}"
169
176
  Hashie::Mash.new(vars)
170
177
  end
@@ -1,5 +1,7 @@
1
1
  module OSDN; module CLI; module Command
2
2
  class FrsUpload < Base
3
+ attr_accessor :target_proj, :visibility, :force_digest, :dry_run, :show_progress
4
+
3
5
  def help
4
6
  puts "#{$0} frs_upload [opts] [target_dir]"
5
7
  puts "Options:"
@@ -164,67 +166,31 @@ module OSDN; module CLI; module Command
164
166
  return false
165
167
  end
166
168
 
167
- vars = load_variables(rdir)
168
- digests = nil
169
- if !@force_digest && vars.local_file_info &&
170
- vars.local_file_info[file.basename.to_s]
171
- finfo = vars.local_file_info[file.basename.to_s]
172
- if finfo[:size] == file.size && finfo.mtime == file.mtime
173
- digests = vars.local_file_info[file.basename.to_s].digests
174
- end
169
+ filecmd = Relfile.new logger
170
+ [:target_proj, :visibility, :force_digest, :show_progress].each do |opt|
171
+ filecmd.send "#{opt}=", send(opt)
175
172
  end
173
+ filecmd.target_package = target_package(rdir)
174
+ filecmd.target_release = target_release(rdir)
175
+ filecmd.calc_file_digest(file)
176
+
177
+ vars = load_variables(rdir)
178
+ digests = vars.local_file_info[file.basename.to_s].digests
176
179
 
177
- unless digests
178
- logger.info "Calculating digest for #{file}..."
179
- digests = {
180
- sha256: hexdigest(Digest::SHA256, file),
181
- sha1: hexdigest(Digest::SHA1, file),
182
- md5: hexdigest(Digest::MD5, file),
183
- }
184
- update_variables rdir, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
185
- end
186
180
  if remote_f = rinfo.files.find { |f| f.name == file.basename.to_s }
187
- if digests.find { |type, dig| dig != remote_f.send("digest_#{type}") }
181
+ if remote_f.size != file.size || digests.find { |type, dig| rd = remote_f.send("digest_#{type}"); rd && rd != '' && dig != rd }
188
182
  logger.error "#{file} was changed from remote file! Please delete remote file before uploading new one."
189
183
  end
190
184
  logger.info "Skip already uploaded file '#{file}'"
191
185
  return
192
186
  end
193
187
 
188
+ finfo = {}
194
189
  logger.info "Uploading file #{file} (#{file.size} bytes)"
195
190
  if @dry_run
196
191
  finfo = Hashie::Mash.new id: '(dry-run)', url: '(dry-run)'
197
192
  else
198
- logger.level <= Logger::INFO && @show_progress != false || @show_progress and
199
- OSDN::CLI._show_progress = true
200
- fio = file.open
201
- logger.info "Starting upload #{file}..."
202
- max_upload_tries = 5
203
- upload_tries = 0
204
- begin
205
- upload_tries += 1
206
- finfo = api.create_release_file target_proj, target_package(rdir), target_release(rdir), fio, visibility: @visibility
207
- rescue OSDNClient::ApiError => e
208
- if max_upload_tries - upload_tries <= 0
209
- logger.error "Max upload attempts (#{max_upload_tries}) has been exceeded, give up!"
210
- raise e
211
- elsif [0, 100, 502].member?(e.code.to_i)
212
- fio.rewind
213
- logger.error "Upload error (#{e.code} #{e.message}), retrying (#{upload_tries}/#{max_upload_tries})..."
214
- sleep 10
215
- retry
216
- else
217
- raise e
218
- end
219
- ensure
220
- OSDN::CLI._show_progress = false
221
- fio.close
222
- end
223
- if digests.find { |type, dig| dig != finfo.send("digest_#{type}") }
224
- logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
225
- else
226
- logger.info "Upload complete."
227
- end
193
+ finfo = filecmd.create_one file
228
194
  end
229
195
  $stdout.puts "New file '#{file}' has been uploaded; #{finfo.url}"
230
196
  end
@@ -3,6 +3,8 @@ require 'pathname'
3
3
 
4
4
  module OSDN; module CLI; module Command
5
5
  class Relfile < FrsBase
6
+ attr_accessor :target_proj, :target_package, :target_release, :visibility, :force_digest, :show_progress
7
+
6
8
  def help
7
9
  puts "#{$0} relfile [opts] [list]"
8
10
  puts "#{$0} relfile [opts] create <target-file> [target-files...]"
@@ -93,16 +95,14 @@ module OSDN; module CLI; module Command
93
95
  end
94
96
  end
95
97
 
96
- def create_one(filename)
98
+ def calc_file_digest(filename)
97
99
  file = Pathname('.') + filename
98
- logger.debug "Calculating digest for #{file}..."
99
-
100
100
  vars = load_variables(file.dirname)
101
101
  digests = nil
102
102
  if !@force_digest && vars.local_file_info &&
103
- vars.local_file_info[file.basename.to_s]
103
+ vars.local_file_info[file.basename.to_s]
104
104
  finfo = vars.local_file_info[file.basename.to_s]
105
- if finfo[:size] == file.size && finfo.mtime == file.mtime
105
+ if finfo.filesize == file.size && finfo.mtime == file.mtime
106
106
  digests = vars.local_file_info[file.basename.to_s].digests
107
107
  end
108
108
  end
@@ -114,19 +114,24 @@ module OSDN; module CLI; module Command
114
114
  sha1: hexdigest(Digest::SHA1, file),
115
115
  md5: hexdigest(Digest::MD5, file),
116
116
  }
117
- update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
117
+ update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, filesize: file.size}}}
118
118
  end
119
+ end
119
120
 
121
+ def create_one(filename)
122
+ file = Pathname('.') + filename
123
+ calc_file_digest file
124
+ vars = load_variables(file.dirname)
120
125
  fio = file.open
121
126
  logger.level <= Logger::INFO && @show_progress != false || @show_progress and
122
127
  OSDN::CLI._show_progress = true
123
- logger.info "Starting upload #{file}..."
128
+ logger.info "Starting upload #{file} (#{file.size} bytes)..."
124
129
  max_upload_tries = 5
125
130
  upload_tries = 0
126
- f = nil
131
+ remote_file = nil
127
132
  begin
128
133
  upload_tries += 1
129
- f = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
134
+ remote_file = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
130
135
  rescue OSDNClient::ApiError => e
131
136
  if max_upload_tries - upload_tries <= 0
132
137
  logger.error "Max upload attempts (#{max_upload_tries}) has been exceeded, give up!"
@@ -144,12 +149,15 @@ module OSDN; module CLI; module Command
144
149
  OSDN::CLI._show_progress = false
145
150
  end
146
151
 
147
- if digests.find { |type, dig| dig != f.send("digest_#{type}") }
148
- logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
152
+ if vars.local_file_info[file.basename.to_s].digests.find { |type, dig| rd = remote_file.send("digest_#{type}"); rd && rd != '' && rd != dig }
153
+ logger.error "File digest mismatch! Uploaded file #{file} may be broken! Please check."
154
+ elsif file.size != remote_file.size
155
+ logger.error "File size mismatch! Uploaded file #{file} may be broken! Please check."
149
156
  else
150
157
  logger.info "Upload complete."
151
158
  end
152
- puts format_file(f)
159
+ puts format_file(remote_file)
160
+ remote_file
153
161
  end
154
162
 
155
163
  def update
@@ -1,5 +1,5 @@
1
1
  module OSDN
2
2
  module CLI
3
- VERSION = "0.1.9"
3
+ VERSION = "0.1.10"
4
4
  end
5
5
  end
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.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - OSDN
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-01 00:00:00.000000000 Z
11
+ date: 2018-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
129
  version: '0'
130
130
  requirements: []
131
131
  rubyforge_project:
132
- rubygems_version: 2.5.2
132
+ rubygems_version: 2.7.6
133
133
  signing_key:
134
134
  specification_version: 4
135
135
  summary: OSDN Command Line Interface