Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions gradle/lib/dependabot/gradle/requirement.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ class Requirement < Dependabot::Requirement
quoted = OPS.keys.map { |k| Regexp.quote k }.join("|")
PATTERN_RAW = T.let("\\s*(#{quoted})?\\s*(#{Gradle::Version::VERSION_PATTERN})\\s*".freeze, String)
PATTERN = /\A#{PATTERN_RAW}\z/
# Like PATTERN, but the leading operator is required
RUBY_STYLE_PATTERN = /\A\s*(#{quoted})\s*(#{Gradle::Version::VERSION_PATTERN})\s*\z/

sig { override.params(obj: T.any(Gem::Version, String)).returns([String, Gem::Version]) }
def self.parse(obj)
Expand Down Expand Up @@ -76,13 +78,16 @@ def convert_java_constraint_to_ruby_constraint(req_string)
raise "Can't convert multiple Java reqs to a single Ruby one"
end

# NOTE: Support ruby-style version requirements that are created from
# PR ignore conditions
version_reqs = req_string.split(",").map(&:strip)
if req_string.include?(",") && !version_reqs.all? { |s| PATTERN.match?(s) }
convert_java_range_to_ruby_range(req_string) if req_string.include?(",")
else
version_reqs.map { |r| convert_java_equals_req_to_ruby(r) }
if version_reqs.length > 1 && !version_reqs.all? { |s| PATTERN.match?(s) }
return convert_java_range_to_ruby_range(req_string)
end

version_reqs.map do |r|
# if an operator is already provided, use it
next r if r.match?(RUBY_STYLE_PATTERN)

convert_java_equals_req_to_ruby(r)
end
end

Expand Down
6 changes: 6 additions & 0 deletions gradle/spec/dependabot/gradle/requirement_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@
let(:requirement_string) { "~> 4.2.5, >= 4.2.5.1" }

it { is_expected.to eq(described_class.new("~> 4.2.5", ">= 4.2.5.1")) }

context "with dynamic version requirements" do
let(:requirement_string) { "~> 4.2.5+1.0.1, >= 4.2.5.1+1." }

it { is_expected.to eq(described_class.new("~> 4.2.5+1.0.1, >= 4.2.5.1+1.")) }
end
end
end

Expand Down
17 changes: 11 additions & 6 deletions maven/lib/dependabot/maven/requirement.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ class Requirement < Dependabot::Requirement
OR_SYNTAX = /(?<=\]|\)),/
PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Maven::Version::VERSION_PATTERN})\\s*".freeze
PATTERN = /\A#{PATTERN_RAW}\z/
# Like PATTERN, but the leading operator is required
RUBY_STYLE_PATTERN = /\A\s*(#{quoted})\s*(#{Maven::Version::VERSION_PATTERN})\s*\z/

def self.parse(obj)
return ["=", Maven::Version.new(obj.to_s)] if obj.is_a?(Gem::Version)
Expand Down Expand Up @@ -71,13 +73,16 @@ def convert_java_constraint_to_ruby_constraint(req_string)
raise "Can't convert multiple Java reqs to a single Ruby one"
end

# NOTE: Support ruby-style version requirements that are created from
# PR ignore conditions
version_reqs = req_string.split(",").map(&:strip)
if req_string.include?(",") && !version_reqs.all? { |s| PATTERN.match?(s) }
convert_java_range_to_ruby_range(req_string) if req_string.include?(",")
else
version_reqs.map { |r| convert_java_equals_req_to_ruby(r) }
if version_reqs.length > 1 && !version_reqs.all? { |s| PATTERN.match?(s) }
return convert_java_range_to_ruby_range(req_string)
end

version_reqs.map do |r|
# if an operator is already provided, use it
next r if r.match?(RUBY_STYLE_PATTERN)

convert_java_equals_req_to_ruby(r)
end
end

Expand Down
2 changes: 1 addition & 1 deletion maven/lib/dependabot/maven/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class Version < Dependabot::Version
VERSION_PATTERN =
"[0-9a-zA-Z]+" \
'(?>\.[0-9a-zA-Z]*)*' \
'([_\-\+][0-9A-Za-z_-]*(\.[0-9A-Za-z_-]*)*)?'
'([_\-\+.][0-9A-Za-z]*)*'

sig { returns(Dependabot::Maven::TokenBucket) }
attr_accessor :token_bucket
Expand Down
12 changes: 12 additions & 0 deletions maven/spec/dependabot/maven/requirement_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,18 @@
let(:requirement_string) { "~> 4.2.5, >= 4.2.5.1" }

it { is_expected.to eq(described_class.new("~> 4.2.5", ">= 4.2.5.1")) }

context "with dynamic version requirements" do
let(:requirement_string) { "~> 4.2.5+1.0.1, >= 4.2.5.1+1." }

it { is_expected.to eq(described_class.new("~> 4.2.5+1.0.1, >= 4.2.5.1+1.")) }

context "with additional semantic versioning" do
let(:requirement_string) { ">= 25-ea+5.a0" }

its(:to_s) { is_expected.to eq(described_class.new(">= 25-ea+5.a0").to_s) }
end
end
end
end

Expand Down