- logger.level <= Logger::INFO && @show_progress != false || @show_progress and
- OSDN::CLI._show_progress = true
- fio = file.open
- logger.info "Starting upload #{file}..."
- max_upload_tries = 5
- upload_tries = 0
- begin
- upload_tries += 1
- finfo = api.create_release_file target_proj, target_package(rdir), target_release(rdir), 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
- OSDN::CLI._show_progress = false
- fio.close
- end
- if digests.find { |type, dig| dig != finfo.send("digest_#{type}") }
- logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
- else
- logger.info "Upload complete."
- end