logger.level <= Logger::INFO && @show_progress != false || @show_progress and
OSDN::CLI._show_progress = true
logger.info "Starting upload #{file}..."
- f = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
- fio.close
- OSDN::CLI._show_progress = false
+ max_upload_tries = 5
+ upload_tries = 0
+ f = nil
+ begin
+ upload_tries += 1
+ f = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
+ rescue OSDNClient::ApiError => e
+ if max_upload_tries - upload_tries <= 0
+ logger.error "Max upload attempts (#{max_upload_tries}) has been exceeded, give up!"
+ raise e
+ elsif [0, 100, 502].member?(e.code.to_i)
+ fio.rewind
+ logger.error "Upload error (#{e.code} #{e.message}), retrying (#{upload_tries}/#{max_upload_tries})..."
+ sleep 10
+ retry
+ else
+ raise e
+ end
+ ensure
+ fio.close
+ OSDN::CLI._show_progress = false
+ end
+
if digests.find { |type, dig| dig != f.send("digest_#{type}") }
logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
else