+ def process_file(file, rdir, rinfo)
+ if file.directory?
+ logger.error "Skip direcotry #{file}"
+ return false
+ end
+
+ filecmd = Relfile.new logger
+ [:target_proj, :visibility, :force_digest, :show_progress].each do |opt|
+ filecmd.send "#{opt}=", send(opt)
+ end
+ filecmd.target_package = target_package(rdir)
+ filecmd.target_release = target_release(rdir)
+ filecmd.calc_file_digest(file)
+
+ vars = load_variables(rdir)
+ digests = vars.local_file_info[file.basename.to_s].digests
+
+ if remote_f = rinfo.files.find { |f| f.name == file.basename.to_s }
+ if remote_f.size != file.size || digests.find { |type, dig| rd = remote_f.send("digest_#{type}"); rd && rd != '' && dig != rd }
+ logger.error "#{file} was changed from remote file! Please delete remote file before uploading new one."
+ end
+ logger.info "Skip already uploaded file '#{file}'"
+ return
+ end
+
+ finfo = {}
+ logger.info "Uploading file #{file} (#{file.size} bytes)"
+ if @dry_run
+ finfo = Hashie::Mash.new id: '(dry-run)', url: '(dry-run)'
+ else
+ finfo = filecmd.create_one file
+ end
+ $stdout.puts "New file '#{file}' has been uploaded; #{finfo.url}"
+ end
+