Skip to content

Commit

Permalink
Sort requirements only for comparison, preserve the original order ot…
Browse files Browse the repository at this point in the history
…herwise
  • Loading branch information
toy committed Sep 2, 2020
1 parent 9418218 commit e241b74
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 7 deletions.
9 changes: 6 additions & 3 deletions lib/rubygems/requirement.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ def initialize(*requirements)
requirements = requirements.flatten
requirements.compact!
requirements.uniq!
requirements.sort_by!(&:to_s)

if requirements.empty?
@requirements = [DefaultRequirement]
Expand Down Expand Up @@ -271,7 +270,7 @@ def ==(other) # :nodoc:
return unless Gem::Requirement === other

# An == check is always necessary
return false unless requirements == other.requirements
return false unless _sorted_requirements == other._sorted_requirements

# An == check is sufficient unless any requirements use ~>
return true unless _tilde_requirements.any?
Expand All @@ -283,8 +282,12 @@ def ==(other) # :nodoc:

protected

def _sorted_requirements
requirements.sort_by(&:to_s)
end

def _tilde_requirements
requirements.select {|r| r.first == "~>" }
_sorted_requirements.select {|r| r.first == "~>" }
end

private
Expand Down
2 changes: 1 addition & 1 deletion test/rubygems/test_gem_requirement.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def test_equals2
refute_requirement_equal "~> 1.3", "~> 1.3.0"
refute_requirement_equal "~> 1.3.0", "~> 1.3"

assert_requirement_equal ["> 2", "~> 1.3"], ["~> 1.3", "> 2"]
assert_requirement_equal ["> 2", "~> 1.3", "~> 1.3.1"], ["~> 1.3.1", "~> 1.3", "> 2"]

assert_requirement_equal ["> 2", "~> 1.3"], ["> 2.0", "~> 1.3"]
assert_requirement_equal ["> 2.0", "~> 1.3"], ["> 2", "~> 1.3"]
Expand Down
6 changes: 3 additions & 3 deletions test/rubygems/test_gem_specification.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2557,11 +2557,11 @@ def test_to_ruby_fancy
if s.respond_to? :add_runtime_dependency then
s.add_runtime_dependency(%q<rake>.freeze, [\"> 0.4\"])
s.add_runtime_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
s.add_runtime_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
s.add_runtime_dependency(%q<pqa>.freeze, [\"> 0.4\", \"<= 0.6\"])
else
s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
s.add_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
s.add_dependency(%q<pqa>.freeze, [\"> 0.4\", \"<= 0.6\"])
end
end
SPEC
Expand All @@ -2578,7 +2578,7 @@ def test_to_ruby_keeps_requirements_as_originally_specified
s.add_dependency 'b', ['~> 1.0', '>= 1.0.0']
end

assert_includes spec.to_ruby, '">= 1.0.0", "~> 1.0"'
assert_includes spec.to_ruby, '"~> 1.0", ">= 1.0.0"'
end

def test_to_ruby_legacy
Expand Down

0 comments on commit e241b74

Please sign in to comment.