class Bundler::ChecksumMismatchError

Public Class Methods

new(name_tuple, existing, checksum) click to toggle source
# File bundler/errors.rb, line 56
def initialize(name_tuple, existing, checksum)
  @name_tuple = name_tuple
  @existing = existing
  @checksum = checksum
end

Public Instance Methods

message() click to toggle source
# File bundler/errors.rb, line 62
    def message
      <<~MESSAGE
        Bundler found mismatched checksums. This is a potential security risk.
          #{@name_tuple.lock_name} #{@existing.to_lock}
            from #{@existing.sources.join("\n    and ")}
          #{@name_tuple.lock_name} #{@checksum.to_lock}
            from #{@checksum.sources.join("\n    and ")}

        #{mismatch_resolution_instructions}
        To ignore checksum security warnings, disable checksum validation with
          `bundle config set --local disable_checksum_validation true`
      MESSAGE
    end
mismatch_resolution_instructions() click to toggle source
# File bundler/errors.rb, line 76
def mismatch_resolution_instructions
  removable, remote = [@existing, @checksum].partition(&:removable?)
  case removable.size
  when 0
    msg = +"Mismatched checksums each have an authoritative source:\n"
    msg << "  1. #{@existing.sources.reject(&:removable?).map(&:to_s).join(" and ")}\n"
    msg << "  2. #{@checksum.sources.reject(&:removable?).map(&:to_s).join(" and ")}\n"
    msg << "You may need to alter your Gemfile sources to resolve this issue.\n"
  when 1
    msg = +"If you trust #{remote.first.sources.first}, to resolve this issue you can:\n"
    msg << removable.first.removal_instructions
  when 2
    msg = +"To resolve this issue you can either:\n"
    msg << @checksum.removal_instructions
    msg << "or if you are sure that the new checksum from #{@checksum.sources.first} is correct:\n"
    msg << @existing.removal_instructions
  end
end