summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bundler/override.rb14
-rw-r--r--spec/bundler/bundler/override_spec.rb6
2 files changed, 14 insertions, 6 deletions
diff --git a/lib/bundler/override.rb b/lib/bundler/override.rb
index d07dad00ea..1ca6d2fde5 100644
--- a/lib/bundler/override.rb
+++ b/lib/bundler/override.rb
@@ -2,7 +2,7 @@
module Bundler
class Override
- LOWER_BOUND_OPERATORS = [">=", ">", "="].freeze
+ UPPER_BOUND_OPERATORS = ["<", "<="].freeze
attr_reader :target, :field, :operation
@@ -30,17 +30,19 @@ module Bundler
def remove_upper_bounds(requirement)
return Gem::Requirement.default if requirement.nil? || requirement.none?
- lower_bounds = requirement.requirements.filter_map do |op, version|
- if LOWER_BOUND_OPERATORS.include?(op)
- [op, version]
+ preserved = requirement.requirements.filter_map do |op, version|
+ if UPPER_BOUND_OPERATORS.include?(op)
+ nil
elsif op == "~>"
[">=", version]
+ else
+ [op, version]
end
end
- return Gem::Requirement.default if lower_bounds.empty?
+ return Gem::Requirement.default if preserved.empty?
- Gem::Requirement.new(lower_bounds.map {|op, v| "#{op} #{v}" })
+ Gem::Requirement.new(preserved.map {|op, v| "#{op} #{v}" })
end
end
end
diff --git a/spec/bundler/bundler/override_spec.rb b/spec/bundler/bundler/override_spec.rb
index bc813e52fc..da3b5aad87 100644
--- a/spec/bundler/bundler/override_spec.rb
+++ b/spec/bundler/bundler/override_spec.rb
@@ -35,6 +35,12 @@ RSpec.describe Bundler::Override do
expect(result).to eq(Gem::Requirement.new(">= 1.5"))
end
+ it "preserves != exclusion constraints" do
+ override = described_class.new("rails", :version, :ignore_upper)
+ result = override.apply_to(Gem::Requirement.new(">= 1.0", "!= 1.5.0", "< 2.0"))
+ expect(result).to eq(Gem::Requirement.new(">= 1.0", "!= 1.5.0"))
+ end
+
it "returns the default requirement when only upper bounds remain" do
override = described_class.new("rails", :version, :ignore_upper)
result = override.apply_to(Gem::Requirement.new("< 2.0"))