/usr/lib/ruby/vendor_ruby/bundler/retry.rb is in ruby-bundler 1.13.6-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | # frozen_string_literal: true
module Bundler
# General purpose class for retrying code that may fail
class Retry
attr_accessor :name, :total_runs, :current_run
class << self
def default_attempts
default_retries + 1
end
alias_method :attempts, :default_attempts
def default_retries
Bundler.settings[:retry]
end
end
def initialize(name, exceptions = nil, retries = self.class.default_retries)
@name = name
@retries = retries
@exceptions = Array(exceptions) || []
@total_runs = @retries + 1 # will run once, then upto attempts.times
end
def attempt(&block)
@current_run = 0
@failed = false
@error = nil
run(&block) while keep_trying?
@result
end
alias_method :attempts, :attempt
private
def run(&block)
@failed = false
@current_run += 1
@result = block.call
rescue => e
fail_attempt(e)
end
def fail_attempt(e)
@failed = true
raise e if last_attempt? || @exceptions.any? {|k| e.is_a?(k) }
return true unless name
Bundler.ui.info "" unless Bundler.ui.debug? # Add new line incase dots preceded this
Bundler.ui.warn "Retrying #{name} due to error (#{current_run.next}/#{total_runs}): #{e.class} #{e.message}", Bundler.ui.debug?
end
def keep_trying?
return true if current_run.zero?
return false if last_attempt?
return true if @failed
end
def last_attempt?
current_run >= total_runs
end
end
end
|