def process!
loop do
begin
break unless process_iteration { active? }
rescue Exception => error
if error.respond_to?(:session)
handle_error(error)
else
raise
end
end
end
failed = transfers.select { |txfr| txfr[:failed] }
if failed.any?
hosts = failed.map { |txfr| txfr[:server] }
errors = failed.map { |txfr| "#{txfr[:error]} (#{txfr[:error].message})" }.uniq.join(", ")
error = TransferError.new("#{operation} via #{transport} failed on #{hosts.join(',')}: #{errors}")
error.hosts = hosts
logger.important(error.message) if logger
raise error
end
logger.debug "#{transport} #{operation} complete" if logger
self
end