X-Git-Url: http://git.osdn.net/view?p=osdn-codes%2Fosdn-cli.git;a=blobdiff_plain;f=lib%2Fosdn%2Fcli%2Fcommand%2Frelfile.rb;h=de060acded681cada242247a8c0b9da6d74d5c54;hp=b7ad73252fe35fbfc1a8ac067f5f463904bf6cb1;hb=79dcb78eed622c4d09a9c0237748e7b73db90e59;hpb=91831932180fe8d605a7cc1255b6b00e4eb01265 diff --git a/lib/osdn/cli/command/relfile.rb b/lib/osdn/cli/command/relfile.rb index b7ad732..de060ac 100644 --- a/lib/osdn/cli/command/relfile.rb +++ b/lib/osdn/cli/command/relfile.rb @@ -121,9 +121,29 @@ module OSDN; module CLI; module Command 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