diff options
| -rw-r--r-- | lib/bundler/override.rb | 14 | ||||
| -rw-r--r-- | spec/bundler/bundler/override_spec.rb | 6 |
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")) |
