#puts " --release=<project> Target release (numeric id)"
puts " -v --visibility=<public|private|hidden>"
puts " Default visibility for newly created items"
+ puts " --force-digest Calc local file digest forcely"
end
def run
[ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
[ '--release', '-r', GetoptLong::REQUIRED_ARGUMENT ],
[ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
+ [ '--force-digest', GetoptLong::NO_ARGUMENT],
)
opts.each do |opt, arg|
case opt
exit
end
@visibility = arg
+ when '--force-digest'
+ @force_digest = true
when '--dry-run'
@dry_run = true
end
end
Pathname.glob(pdir + '*').sort.each do |rdir|
+ if !rdir.directory?
+ logger.warn "Skip normal file '#{rdir}' in release level"
+ next
+ end
+
vars = load_variables(rdir)
rinfo = nil
if vars.release_id
next
end
- logger.debug "Calculating digest for #{file}..."
- digests = {
- sha256: hexdigest(Digest::SHA256, file),
- sha1: hexdigest(Digest::SHA1, file),
- md5: hexdigest(Digest::MD5, file),
- }
+ vars = load_variables(rdir)
+ digests = nil
+ if !@force_digest && vars.local_file_info &&
+ 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
+ digests = vars.local_file_info[file.basename.to_s].digests
+ end
+ end
+
+ unless digests
+ logger.info "Calculating digest for #{file}..."
+ digests = {
+ sha256: hexdigest(Digest::SHA256, file),
+ sha1: hexdigest(Digest::SHA1, file),
+ md5: hexdigest(Digest::MD5, file),
+ }
+ update_variables rdir, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
+ end
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}'"
+ logger.info "Skip already uploaded file '#{file}'"
else
logger.info "Uploading file #{file} (#{file.size} bytes)"
if @dry_run