module OSDN; module CLI; module Command
class Relfile < FrsBase
+ attr_accessor :target_proj, :target_package, :target_release, :visibility, :force_digest, :show_progress
+
def help
puts "#{$0} relfile [opts] [list]"
puts "#{$0} relfile [opts] create <target-file> [target-files...]"
end
end
- def create_one(filename)
+ def calc_file_digest(filename)
file = Pathname('.') + filename
- logger.debug "Calculating digest for #{file}..."
-
vars = load_variables(file.dirname)
digests = nil
if !@force_digest && vars.local_file_info &&
- vars.local_file_info[file.basename.to_s]
+ vars.local_file_info[file.basename.to_s]
finfo = vars.local_file_info[file.basename.to_s]
- if finfo[:size] == file.size && finfo.mtime == file.mtime
+ if finfo.filesize == file.size && finfo.mtime == file.mtime
digests = vars.local_file_info[file.basename.to_s].digests
end
end
sha1: hexdigest(Digest::SHA1, file),
md5: hexdigest(Digest::MD5, file),
}
- update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
+ update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, filesize: file.size}}}
end
+ end
+ def create_one(filename)
+ file = Pathname('.') + filename
+ calc_file_digest file
+ vars = load_variables(file.dirname)
fio = file.open
logger.level <= Logger::INFO && @show_progress != false || @show_progress and
OSDN::CLI._show_progress = true
- logger.info "Starting upload #{file}..."
+ logger.info "Starting upload #{file} (#{file.size} bytes)..."
max_upload_tries = 5
upload_tries = 0
- f = nil
+ remote_file = nil
begin
upload_tries += 1
- f = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
+ remote_file = 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!"
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."
+ if vars.local_file_info[file.basename.to_s].digests.find { |type, dig| rd = remote_file.send("digest_#{type}"); rd && rd != '' && rd != dig }
+ logger.error "File digest mismatch! Uploaded file #{file} may be broken! Please check."
+ elsif file.size != remote_file.size
+ logger.error "File size mismatch! Uploaded file #{file} may be broken! Please check."
else
logger.info "Upload complete."
end
- puts format_file(f)
+ puts format_file(remote_file)
+ remote_file
end
def update