summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bundler/dsl.rb6
-rw-r--r--spec/bundler/bundler/dsl_spec.rb13
2 files changed, 18 insertions, 1 deletions
diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb
index c7a7d855ee..05eb493677 100644
--- a/lib/bundler/dsl.rb
+++ b/lib/bundler/dsl.rb
@@ -279,7 +279,9 @@ module Bundler
def validate_override_operation!(operation)
case operation
- when String, nil
+ when String
+ Gem::Requirement.new(operation)
+ when nil
# ok
when Symbol
return if SUPPORTED_OVERRIDE_SYMBOL_OPERATIONS.include?(operation)
@@ -287,6 +289,8 @@ module Bundler
else
raise ArgumentError, "override operation must be a String, Symbol, or nil, got #{operation.inspect}"
end
+ rescue Gem::Requirement::BadRequirementError => e
+ raise ArgumentError, "invalid override version requirement #{operation.inspect}: #{e.message}"
end
def validate_override_uniqueness!(target, field)
diff --git a/spec/bundler/bundler/dsl_spec.rb b/spec/bundler/bundler/dsl_spec.rb
index 39f745c05e..99ab9088f9 100644
--- a/spec/bundler/bundler/dsl_spec.rb
+++ b/spec/bundler/bundler/dsl_spec.rb
@@ -441,6 +441,19 @@ RSpec.describe Bundler::Dsl do
end.to raise_error(ArgumentError, /unsupported override operation/)
end
+ it "raises ArgumentError for an unparsable version string" do
+ expect do
+ subject.override("rails", version: "not a version")
+ end.to raise_error(ArgumentError, /invalid override version requirement/)
+ end
+
+ it "does not record an override when the version string is invalid" do
+ expect do
+ subject.override("rails", version: "not a version")
+ end.to raise_error(ArgumentError)
+ expect(subject.overrides).to eq([])
+ end
+
it "rejects atomically when one field in a multi-field call is invalid" do
expect do
subject.override("rails", version: ">= 8.0", required_ruby_version: :ignore_upper)