Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

Commit

Permalink
Auto merge of #6669 - ChrisBr:fix_dep_proxy, r=segiddins
Browse files Browse the repository at this point in the history
Fix DepProxy == method

### What was the end-user problem that led to this PR?
After implementing a new hash table strategy in JRuby, bundle is broken for JRuby. The problem is caused that the ``==`` method in bundler does not check the class of the ``other`` object. This causes problems now when calling ``==`` on object other than DepProxy or nil.

 jruby/jruby#5280 travis-ci/travis-ci#9994

### What was your diagnosis of the problem?
The code crashes for anything other than DepProxy class or nil.

### What is your fix for the problem, implemented in this PR?
Checking now also that other class is the same as self.
  • Loading branch information
bundlerbot committed Aug 27, 2018
2 parents 668c061 + ce92868 commit 1856133
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/bundler/dep_proxy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ def initialize(dep, platform)
end

def hash
@hash ||= dep.hash
@hash ||= [dep, __platform].hash
end

def ==(other)
return if other.nil?
return false if other.class != self.class
dep == other.dep && __platform == other.__platform
end

Expand Down
22 changes: 22 additions & 0 deletions spec/bundler/dep_proxy_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true

RSpec.describe Bundler::DepProxy do
let(:dep) { Bundler::Dependency.new("rake", ">= 0") }
subject { described_class.new(dep, Gem::Platform::RUBY) }
let(:same) { subject }
let(:other) { subject.dup }
let(:different) { described_class.new(dep, Gem::Platform::JAVA) }

describe "#eql?" do
it { expect(subject.eql?(same)).to be true }
it { expect(subject.eql?(other)).to be true }
it { expect(subject.eql?(different)).to be false }
it { expect(subject.eql?(nil)).to be false }
it { expect(subject.eql?("foobar")).to be false }
end

describe "#hash" do
it { expect(subject.hash).to eq(same.hash) }
it { expect(subject.hash).to eq(other.hash) }
end
end

0 comments on commit 1856133

Please sign in to comment.