+require 'digest'
+
module OSDN; module CLI; module Command
class FrsUpload < Base
def help
next
end
- if rinfo.files.find { |f| f.name == file.basename.to_s }
+ digests = {
+ sha256: hexdigest(Digest::SHA256, file),
+ sha1: hexdigest(Digest::SHA1, file),
+ md5: hexdigest(Digest::MD5, file),
+ }
+ if remote_f = rinfo.files.find { |f| f.name == file.basename.to_s }
+ if digests.find { |type, dig| dig != remote_f.send("digest_#{type}") }
+ logger.error "#{file} was changed from remote file! Please delete remote file before uploading new one."
+ end
logger.warn "Skip already uploaded file '#{file}'"
else
logger.info "Uploading file #{file} (#{file.size} bytes)"
- # TODO: show progress bar!
if @dry_run
finfo = Hashie::Mash.new id: '(dry-run)', url: '(dry-run)'
else
- finfo = api.create_release_file target_proj, target_package(rdir), target_release(rdir), file.open, visibility: @visibility
+ # TODO: show progress bar!
+ fio = file.open
+ finfo = api.create_release_file target_proj, target_package(rdir), target_release(rdir), fio, visibility: @visibility
+ fio.close
logger.info "Upload completed."
end
$stdout.puts "New file '#{file}' has been uploaded; #{finfo.url}"
def api
OSDNClient::ProjectApi.new
end
+
+ def hexdigest(klass, file)
+ fio = file.open
+ dig = klass.new
+ while buf = fio.read(1024*1024) and buf.length > 0
+ dig << buf
+ end
+ fio.close
+ dig.hexdigest
+ end
end
end; end; end