dependabot-maven 0.390.0 → 0.391.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dependabot/maven/file_fetcher.rb +37 -14
- data/lib/dependabot/maven/file_parser.rb +11 -10
- data/lib/dependabot/maven/file_updater/declaration_finder.rb +14 -13
- data/lib/dependabot/maven/file_updater.rb +10 -10
- data/lib/dependabot/maven/package/package_details_fetcher.rb +5 -5
- data/lib/dependabot/maven/requirement.rb +2 -2
- data/lib/dependabot/maven/shared/shared_metadata_finder.rb +5 -5
- data/lib/dependabot/maven/shared/shared_package_details_fetcher.rb +9 -8
- data/lib/dependabot/maven/shared/shared_property_value_updater.rb +1 -1
- data/lib/dependabot/maven/shared/shared_requirement.rb +1 -1
- data/lib/dependabot/maven/shared/shared_version_finder.rb +2 -5
- data/lib/dependabot/maven/update_checker/property_updater.rb +10 -10
- data/lib/dependabot/maven/update_checker/requirements_updater.rb +6 -5
- data/lib/dependabot/maven/update_checker.rb +10 -11
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e291e2478cd805665628ff741f4bf0b36a80c9297c20aa4219080f32155f30a3
|
|
4
|
+
data.tar.gz: f155a760998f79499829ce17fecea84c3a288f96ee302e70774d2dee66824b64
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a3249ddd53286a0e01e1f88a3ab7e07baada7d595a0888f4138d410503847b1a0306e6f575e426c55fb5630d3851e63db59744ee7c97ab70e8e27178d996a175
|
|
7
|
+
data.tar.gz: d54dcd4d6c97f470cd22f871e4b8532cdf9cfc47ada811ffb2d98854e0f7867d2422310e8f5097dc573102b628e4d8b666c8c9a024376b76f60e63c2794d714a
|
|
@@ -92,18 +92,20 @@ module Dependabot
|
|
|
92
92
|
|
|
93
93
|
doc.css(MODULE_SELECTOR).flat_map do |module_node|
|
|
94
94
|
relative_path = module_node.content.strip
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
next [] if fetched_filenames.include?(
|
|
103
|
-
|
|
104
|
-
|
|
95
|
+
module_path = Pathname.new(File.join(base_path, relative_path)).cleanpath.to_path
|
|
96
|
+
|
|
97
|
+
# Skip a module whose `pom.xml` was already collected via another path.
|
|
98
|
+
next [] if fetched_filenames.include?(File.join(module_path, "pom.xml"))
|
|
99
|
+
|
|
100
|
+
child_pom = fetch_child_pom(module_path)
|
|
101
|
+
next [] if child_pom.nil?
|
|
102
|
+
next [] if fetched_filenames.include?(child_pom.name)
|
|
103
|
+
next [] if Dependabot::FileFiltering.should_exclude_path?(
|
|
104
|
+
child_pom.name,
|
|
105
|
+
"file from final collection",
|
|
106
|
+
@exclude_paths
|
|
107
|
+
)
|
|
105
108
|
|
|
106
|
-
child_pom = fetch_file_from_host(path)
|
|
107
109
|
fetched_files = [
|
|
108
110
|
child_pom,
|
|
109
111
|
recursively_fetch_child_poms(
|
|
@@ -113,10 +115,31 @@ module Dependabot
|
|
|
113
115
|
].flatten
|
|
114
116
|
fetched_filenames += [child_pom.name] + fetched_files.map(&:name)
|
|
115
117
|
fetched_files
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
end
|
|
119
|
+
end
|
|
118
120
|
|
|
119
|
-
|
|
121
|
+
# Resolves a `<module>` value to its pom, preferring the module as a directory
|
|
122
|
+
# (its `pom.xml`) and otherwise treating an `.xml` value as a pom file.
|
|
123
|
+
sig { params(module_path: String).returns(T.nilable(Dependabot::DependencyFile)) }
|
|
124
|
+
def fetch_child_pom(module_path)
|
|
125
|
+
fetch_file_from_host(File.join(module_path, "pom.xml"))
|
|
126
|
+
rescue Dependabot::DependencyFileNotFound
|
|
127
|
+
# A non-`.xml` module may be a git submodule, which we can't update.
|
|
128
|
+
unless module_path.end_with?(".xml")
|
|
129
|
+
fetch_file_from_host(File.join(module_path, "pom.xml"), fetch_submodules: true)
|
|
130
|
+
return nil
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# An `.xml` value may be a custom-named pom file rather than a directory.
|
|
134
|
+
begin
|
|
135
|
+
fetch_file_from_host(module_path)
|
|
136
|
+
rescue Dependabot::DependencyFileNotFound
|
|
137
|
+
fetch_file_from_host(module_path, fetch_submodules: true)
|
|
138
|
+
nil
|
|
139
|
+
rescue Errno::EISDIR
|
|
140
|
+
# An `.xml` directory with no `pom.xml` inside it; re-raise so the
|
|
141
|
+
# error carries the full source-directory path.
|
|
142
|
+
fetch_file_from_host(File.join(module_path, "pom.xml"))
|
|
120
143
|
end
|
|
121
144
|
end
|
|
122
145
|
|
|
@@ -506,13 +506,14 @@ module Dependabot
|
|
|
506
506
|
merged = []
|
|
507
507
|
used_indices = Set.new
|
|
508
508
|
requirements.each_with_index do |dep_scan_req, i|
|
|
509
|
-
|
|
509
|
+
pom_file = dep_scan_req.metadata_string("pom_file")
|
|
510
|
+
next if used_indices.include?(i) || pom_file.nil?
|
|
510
511
|
|
|
511
512
|
# Look for another requirement where pom_file matches property_source
|
|
512
513
|
match_index = requirements.find_index.with_index do |parsing_req, j|
|
|
513
514
|
j > i &&
|
|
514
515
|
!used_indices.include?(j) &&
|
|
515
|
-
|
|
516
|
+
pom_file == parsing_req.file
|
|
516
517
|
end
|
|
517
518
|
|
|
518
519
|
if match_index
|
|
@@ -522,11 +523,11 @@ module Dependabot
|
|
|
522
523
|
# We prefer file and requirement properties from parsed requirements,
|
|
523
524
|
# because they include correct file and not evaluated property value.
|
|
524
525
|
merged_req = {
|
|
525
|
-
requirement: parsing_req
|
|
526
|
-
file: parsing_req
|
|
527
|
-
groups: [*dep_scan_req
|
|
528
|
-
source: dep_scan_req
|
|
529
|
-
metadata: merge_metadata(dep_scan_req
|
|
526
|
+
requirement: parsing_req.requirement,
|
|
527
|
+
file: parsing_req.file,
|
|
528
|
+
groups: [*dep_scan_req.groups, *parsing_req.groups].uniq.compact,
|
|
529
|
+
source: dep_scan_req.source,
|
|
530
|
+
metadata: merge_metadata(T.must(dep_scan_req.metadata), T.must(parsing_req.metadata))
|
|
530
531
|
}
|
|
531
532
|
|
|
532
533
|
merged << Dependabot::DependencyRequirement.create(merged_req)
|
|
@@ -545,9 +546,9 @@ module Dependabot
|
|
|
545
546
|
# Merge metadata from two requirements, combining all keys
|
|
546
547
|
sig do
|
|
547
548
|
params(
|
|
548
|
-
metadata1:
|
|
549
|
-
metadata2:
|
|
550
|
-
).returns(
|
|
549
|
+
metadata1: Dependabot::DependencyRequirement::ObjectHash,
|
|
550
|
+
metadata2: Dependabot::DependencyRequirement::ObjectHash
|
|
551
|
+
).returns(Dependabot::DependencyRequirement::ObjectHash)
|
|
551
552
|
end
|
|
552
553
|
def merge_metadata(metadata1, metadata2)
|
|
553
554
|
metadata1.merge(metadata2) do |_key, old_value, new_value|
|
|
@@ -20,12 +20,10 @@ module Dependabot
|
|
|
20
20
|
<path>.*?</path>|
|
|
21
21
|
<artifactItem>.*?</artifactItem>
|
|
22
22
|
}mx
|
|
23
|
-
Requirement = T.type_alias { T.any(Dependabot::DependencyRequirement, T::Hash[Symbol, Object]) }
|
|
24
|
-
|
|
25
23
|
sig { returns(Dependabot::Dependency) }
|
|
26
24
|
attr_reader :dependency
|
|
27
25
|
|
|
28
|
-
sig { returns(
|
|
26
|
+
sig { returns(Dependabot::DependencyRequirement) }
|
|
29
27
|
attr_reader :declaring_requirement
|
|
30
28
|
|
|
31
29
|
sig { returns(T::Array[Dependabot::DependencyFile]) }
|
|
@@ -35,13 +33,16 @@ module Dependabot
|
|
|
35
33
|
params(
|
|
36
34
|
dependency: Dependabot::Dependency,
|
|
37
35
|
dependency_files: T::Array[Dependabot::DependencyFile],
|
|
38
|
-
declaring_requirement:
|
|
36
|
+
declaring_requirement: Dependabot::DependencyRequirement::Input
|
|
39
37
|
).void
|
|
40
38
|
end
|
|
41
39
|
def initialize(dependency:, dependency_files:, declaring_requirement:)
|
|
42
40
|
@dependency = dependency
|
|
43
41
|
@dependency_files = dependency_files
|
|
44
|
-
@declaring_requirement =
|
|
42
|
+
@declaring_requirement = T.let(
|
|
43
|
+
Dependabot::DependencyRequirement.create(declaring_requirement),
|
|
44
|
+
Dependabot::DependencyRequirement
|
|
45
|
+
)
|
|
45
46
|
@declaration_strings = T.let(nil, T.nilable(T::Array[String]))
|
|
46
47
|
@property_value_finder = T.let(nil, T.nilable(Maven::FileParser::PropertyValueFinder))
|
|
47
48
|
end
|
|
@@ -62,7 +63,7 @@ module Dependabot
|
|
|
62
63
|
|
|
63
64
|
sig { returns(Dependabot::DependencyFile) }
|
|
64
65
|
def declaring_pom
|
|
65
|
-
filename = declaring_requirement.
|
|
66
|
+
filename = declaring_requirement.file || declaring_requirement.metadata_string("pom_file")
|
|
66
67
|
declaring_pom = dependency_files.find { |f| f.name == filename }
|
|
67
68
|
return declaring_pom if declaring_pom
|
|
68
69
|
|
|
@@ -90,7 +91,7 @@ module Dependabot
|
|
|
90
91
|
next false unless classifier_matches?(node)
|
|
91
92
|
next false unless node_name == dependency_name
|
|
92
93
|
next false unless packaging_type_matches?(node)
|
|
93
|
-
next false unless declaring_requirement.
|
|
94
|
+
next false unless declaring_requirement.groups == ["plugin"] || scope_matches?(node)
|
|
94
95
|
|
|
95
96
|
declaring_requirement_matches?(node)
|
|
96
97
|
end
|
|
@@ -115,7 +116,7 @@ module Dependabot
|
|
|
115
116
|
def declaring_requirement_matches?(node)
|
|
116
117
|
node_requirement = node.at_css("version")&.content&.strip
|
|
117
118
|
|
|
118
|
-
if declaring_requirement.
|
|
119
|
+
if (declaring_property_name = declaring_requirement.metadata_string("property_name"))
|
|
119
120
|
return false unless node_requirement
|
|
120
121
|
|
|
121
122
|
property_name =
|
|
@@ -124,15 +125,15 @@ module Dependabot
|
|
|
124
125
|
&.named_captures
|
|
125
126
|
&.fetch("property")
|
|
126
127
|
|
|
127
|
-
property_name ==
|
|
128
|
+
property_name == declaring_property_name
|
|
128
129
|
else
|
|
129
|
-
node_requirement == declaring_requirement.
|
|
130
|
+
node_requirement == declaring_requirement.requirement_string
|
|
130
131
|
end
|
|
131
132
|
end
|
|
132
133
|
|
|
133
134
|
sig { params(node: Nokogiri::XML::Document).returns(T::Boolean) }
|
|
134
135
|
def packaging_type_matches?(node)
|
|
135
|
-
type = declaring_requirement.
|
|
136
|
+
type = declaring_requirement.metadata_string("packaging_type")
|
|
136
137
|
type == packaging_type(node)
|
|
137
138
|
end
|
|
138
139
|
|
|
@@ -141,13 +142,13 @@ module Dependabot
|
|
|
141
142
|
return true unless node.at_xpath("./*/classifier")
|
|
142
143
|
|
|
143
144
|
classifier = evaluated_value(node.at_xpath("./*/classifier").content.strip)
|
|
144
|
-
dep_classifier = dependency.requirements.first&.
|
|
145
|
+
dep_classifier = dependency.requirements.first&.metadata_string("classifier")
|
|
145
146
|
classifier == dep_classifier
|
|
146
147
|
end
|
|
147
148
|
|
|
148
149
|
sig { params(node: Nokogiri::XML::Document).returns(T::Boolean) }
|
|
149
150
|
def scope_matches?(node)
|
|
150
|
-
dependency_type = declaring_requirement.
|
|
151
|
+
dependency_type = declaring_requirement.groups
|
|
151
152
|
|
|
152
153
|
node_type = dependency_scope(node) == "test" ? ["test"] : []
|
|
153
154
|
|
|
@@ -67,11 +67,11 @@ module Dependabot
|
|
|
67
67
|
|
|
68
68
|
# Loop through each changed requirement and update the files
|
|
69
69
|
reqs.each do |new_req, old_req|
|
|
70
|
-
raise "Bad req match" unless new_req
|
|
71
|
-
next if new_req
|
|
70
|
+
raise "Bad req match" unless new_req.file == T.must(old_req).file
|
|
71
|
+
next if new_req.requirement == T.must(old_req).requirement
|
|
72
72
|
|
|
73
|
-
file_name = T.
|
|
74
|
-
if new_req.
|
|
73
|
+
file_name = T.must(new_req.file || new_req.metadata_string("pom_file"))
|
|
74
|
+
if new_req.metadata_string("property_name")
|
|
75
75
|
files = update_pomfiles_for_property_change(files, new_req)
|
|
76
76
|
pom = files.find { |f| f.name == file_name }
|
|
77
77
|
files[T.must(files.index(pom))] =
|
|
@@ -95,13 +95,13 @@ module Dependabot
|
|
|
95
95
|
.returns(T::Array[Dependabot::DependencyFile])
|
|
96
96
|
end
|
|
97
97
|
def update_pomfiles_for_property_change(pomfiles, req)
|
|
98
|
-
property_name =
|
|
98
|
+
property_name = T.must(req.metadata_string("property_name"))
|
|
99
99
|
|
|
100
100
|
PropertyValueUpdater.new(dependency_files: pomfiles)
|
|
101
101
|
.update_pomfiles_for_property_change(
|
|
102
102
|
property_name: property_name,
|
|
103
|
-
callsite_pom: T.must(pomfiles.find { |f| f.name == req.
|
|
104
|
-
updated_value: req.
|
|
103
|
+
callsite_pom: T.must(pomfiles.find { |f| f.name == req.file }),
|
|
104
|
+
updated_value: T.must(req.requirement_string)
|
|
105
105
|
)
|
|
106
106
|
end
|
|
107
107
|
|
|
@@ -254,11 +254,11 @@ module Dependabot
|
|
|
254
254
|
.returns(String)
|
|
255
255
|
end
|
|
256
256
|
def updated_file_declaration(old_declaration, previous_req, requirement)
|
|
257
|
-
original_req_string = previous_req.
|
|
257
|
+
original_req_string = T.must(previous_req.requirement_string)
|
|
258
258
|
|
|
259
259
|
old_declaration.gsub(
|
|
260
260
|
/(?<=\s|>)#{Regexp.quote(original_req_string)}(?=\s|<)/,
|
|
261
|
-
|
|
261
|
+
T.must(requirement.requirement_string)
|
|
262
262
|
)
|
|
263
263
|
end
|
|
264
264
|
|
|
@@ -333,7 +333,7 @@ module Dependabot
|
|
|
333
333
|
artifact_id.text = dependency.name.split(":").last
|
|
334
334
|
dependency_node.add_text("\n#{current_indentation_level}")
|
|
335
335
|
version = REXML::Element.new("version", dependency_node)
|
|
336
|
-
version.text =
|
|
336
|
+
version.text = T.must(requirement.requirement_string)
|
|
337
337
|
dependency_node.add_text("\n#{parent_indentation_level}")
|
|
338
338
|
end
|
|
339
339
|
|
|
@@ -27,9 +27,9 @@ module Dependabot
|
|
|
27
27
|
).void
|
|
28
28
|
end
|
|
29
29
|
def initialize(dependency:, dependency_files:, credentials:)
|
|
30
|
-
@dependency =
|
|
31
|
-
@dependency_files =
|
|
32
|
-
@credentials =
|
|
30
|
+
@dependency = dependency
|
|
31
|
+
@dependency_files = dependency_files
|
|
32
|
+
@credentials = credentials
|
|
33
33
|
|
|
34
34
|
@pom_repository_details = T.let(nil, T.nilable(T::Array[RepositoryDetails]))
|
|
35
35
|
@repository_finder = T.let(nil, T.nilable(Maven::FileParser::RepositoriesFinder))
|
|
@@ -123,8 +123,8 @@ module Dependabot
|
|
|
123
123
|
# Returns the POM file for the dependency, if it exists.
|
|
124
124
|
sig { returns(T.nilable(Dependabot::DependencyFile)) }
|
|
125
125
|
def pom
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
requirement = dependency.requirements.first
|
|
127
|
+
filename = requirement&.file || requirement&.metadata_string("pom_file")
|
|
128
128
|
dependency_files.find { |f| f.name == filename }
|
|
129
129
|
end
|
|
130
130
|
end
|
|
@@ -15,9 +15,9 @@ module Dependabot
|
|
|
15
15
|
|
|
16
16
|
quoted = OPS.keys.map { |k| Regexp.quote k }.join("|")
|
|
17
17
|
PATTERN_RAW = T.let("\\s*(#{quoted})?\\s*(#{Maven::Version::VERSION_PATTERN})\\s*".freeze, String)
|
|
18
|
-
PATTERN =
|
|
18
|
+
PATTERN = /\A#{PATTERN_RAW}\z/
|
|
19
19
|
# Like PATTERN, but the leading operator is required
|
|
20
|
-
RUBY_STYLE_PATTERN =
|
|
20
|
+
RUBY_STYLE_PATTERN = /\A\s*(#{quoted})\s*(#{Maven::Version::VERSION_PATTERN})\s*\z/
|
|
21
21
|
|
|
22
22
|
sig { override.returns(Regexp) }
|
|
23
23
|
def self.pattern
|
|
@@ -170,12 +170,12 @@ module Dependabot
|
|
|
170
170
|
|
|
171
171
|
sig { overridable.returns(String) }
|
|
172
172
|
def maven_repo_url
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
requirement = dependency.requirements.find(&:source)
|
|
174
|
+
return central_repo_url unless requirement
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
176
|
+
raise TypeError, "Maven repository source must be a hash" if requirement.source_hash.nil?
|
|
177
|
+
|
|
178
|
+
requirement.source_string("url") || central_repo_url
|
|
179
179
|
end
|
|
180
180
|
|
|
181
181
|
sig { overridable.returns(String) }
|
|
@@ -17,11 +17,11 @@ module Dependabot
|
|
|
17
17
|
|
|
18
18
|
abstract!
|
|
19
19
|
|
|
20
|
-
MAVEN_METADATA_XML =
|
|
21
|
-
REPOSITORY_TYPE =
|
|
22
|
-
URL_KEY =
|
|
23
|
-
AUTH_HEADERS_KEY =
|
|
24
|
-
DEFAULT_CENTRAL_REPO_URL =
|
|
20
|
+
MAVEN_METADATA_XML = "maven-metadata.xml"
|
|
21
|
+
REPOSITORY_TYPE = "maven_repository"
|
|
22
|
+
URL_KEY = "url"
|
|
23
|
+
AUTH_HEADERS_KEY = "auth_headers"
|
|
24
|
+
DEFAULT_CENTRAL_REPO_URL = "https://repo.maven.apache.org/maven2"
|
|
25
25
|
RepositoryDetails = T.type_alias { T::Hash[String, T.any(String, T::Hash[String, String])] }
|
|
26
26
|
VersionDetails = T.type_alias do
|
|
27
27
|
{
|
|
@@ -83,8 +83,9 @@ module Dependabot
|
|
|
83
83
|
def dependency_files_url(repository_url, version)
|
|
84
84
|
_, artifact_id = dependency_parts
|
|
85
85
|
base_url = dependency_base_url(repository_url)
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
requirement = dependency.requirements.first
|
|
87
|
+
type = requirement&.metadata_string("packaging_type") || "jar"
|
|
88
|
+
classifier = requirement&.metadata_string("classifier")
|
|
88
89
|
actual_classifier = classifier.nil? ? "" : "-#{classifier}"
|
|
89
90
|
|
|
90
91
|
"#{base_url}/#{version}/#{artifact_id}-#{version}#{actual_classifier}.#{type}"
|
|
@@ -350,7 +351,7 @@ module Dependabot
|
|
|
350
351
|
# the consumer POM omits <type>, causing the parser to default to "jar".
|
|
351
352
|
# Only fall back when there's no classifier (classifier artifacts are specific).
|
|
352
353
|
next false unless response.status == 404
|
|
353
|
-
next false if dependency.requirements.first&.
|
|
354
|
+
next false if dependency.requirements.first&.metadata_string("classifier")
|
|
354
355
|
|
|
355
356
|
pom_response = Dependabot::RegistryClient.head(
|
|
356
357
|
url: dependency_pom_url(url, version),
|
|
@@ -52,10 +52,7 @@ module Dependabot
|
|
|
52
52
|
# - Only hexadecimal characters (0-9, a-f)
|
|
53
53
|
# - Case-insensitive
|
|
54
54
|
# - At least one letter a-f to avoid purely numeric strings
|
|
55
|
-
GIT_COMMIT =
|
|
56
|
-
/\A(?=[0-9a-f]{#{MIN_GIT_SHA_LENGTH},#{MAX_GIT_SHA_LENGTH}}\z)(?=.*[a-f])/i,
|
|
57
|
-
Regexp
|
|
58
|
-
)
|
|
55
|
+
GIT_COMMIT = /\A(?=[0-9a-f]{#{MIN_GIT_SHA_LENGTH},#{MAX_GIT_SHA_LENGTH}}\z)(?=.*[a-f])/i
|
|
59
56
|
|
|
60
57
|
sig { params(comparison_version: Dependabot::Version).returns(T::Boolean) }
|
|
61
58
|
def matches_dependency_version_type?(comparison_version)
|
|
@@ -111,7 +108,7 @@ module Dependabot
|
|
|
111
108
|
return true if dependency.numeric_version&.prerelease?
|
|
112
109
|
|
|
113
110
|
dependency.requirements.any? do |req|
|
|
114
|
-
req_string =
|
|
111
|
+
req_string = req.requirement_string.to_s
|
|
115
112
|
req_string.split(",").any? do |segment|
|
|
116
113
|
normalized = segment.strip.gsub(/\A[\[\(]\s*/, "")
|
|
117
114
|
.gsub(/\s*[\]\)]\z/, "")
|
|
@@ -122,9 +122,9 @@ module Dependabot
|
|
|
122
122
|
source: nil
|
|
123
123
|
).parse.select do |dep|
|
|
124
124
|
dep.requirements.any? do |r|
|
|
125
|
-
next unless r.
|
|
125
|
+
next unless r.metadata_string("property_name") == property_name
|
|
126
126
|
|
|
127
|
-
r.
|
|
127
|
+
r.metadata_string("property_source") == property_source
|
|
128
128
|
end
|
|
129
129
|
end,
|
|
130
130
|
T.nilable(T::Array[Dependabot::Dependency])
|
|
@@ -135,8 +135,8 @@ module Dependabot
|
|
|
135
135
|
def property_name
|
|
136
136
|
@property_name ||= T.let(
|
|
137
137
|
dependency.requirements
|
|
138
|
-
.find { |r| r.
|
|
139
|
-
&.
|
|
138
|
+
.find { |r| r.metadata_string("property_name") }
|
|
139
|
+
&.metadata_string("property_name"),
|
|
140
140
|
T.nilable(String)
|
|
141
141
|
)
|
|
142
142
|
|
|
@@ -149,8 +149,8 @@ module Dependabot
|
|
|
149
149
|
def property_source
|
|
150
150
|
@property_source ||= T.let(
|
|
151
151
|
dependency.requirements
|
|
152
|
-
.find { |r| r.
|
|
153
|
-
&.
|
|
152
|
+
.find { |r| r.metadata_string("property_name") == property_name }
|
|
153
|
+
&.metadata_string("property_source"),
|
|
154
154
|
T.nilable(String)
|
|
155
155
|
)
|
|
156
156
|
end
|
|
@@ -192,10 +192,10 @@ module Dependabot
|
|
|
192
192
|
sig { params(dep: Dependabot::Dependency).returns(String) }
|
|
193
193
|
def current_property_value(dep)
|
|
194
194
|
declaring_requirement = declaring_property_requirement(dep)
|
|
195
|
-
callsite_pom = dependency_files.find { |f| f.name == declaring_requirement.
|
|
195
|
+
callsite_pom = dependency_files.find { |f| f.name == declaring_requirement.file }
|
|
196
196
|
unless callsite_pom
|
|
197
197
|
raise DependencyFileNotEvaluatable,
|
|
198
|
-
"POM not found: #{declaring_requirement.
|
|
198
|
+
"POM not found: #{declaring_requirement.file} for property #{property_name}"
|
|
199
199
|
end
|
|
200
200
|
|
|
201
201
|
property_value =
|
|
@@ -212,9 +212,9 @@ module Dependabot
|
|
|
212
212
|
def declaring_property_requirement(dep)
|
|
213
213
|
declaring_requirement =
|
|
214
214
|
dep.requirements.find do |r|
|
|
215
|
-
next false unless r.
|
|
215
|
+
next false unless r.metadata_string("property_name") == property_name
|
|
216
216
|
|
|
217
|
-
r.
|
|
217
|
+
r.metadata_string("property_source") == property_source
|
|
218
218
|
end
|
|
219
219
|
|
|
220
220
|
return declaring_requirement if declaring_requirement
|
|
@@ -54,14 +54,15 @@ module Dependabot
|
|
|
54
54
|
# requirement at index `i` to correspond to the previous requirement
|
|
55
55
|
# at the same index.
|
|
56
56
|
requirements.map do |req|
|
|
57
|
-
|
|
58
|
-
next req if
|
|
57
|
+
requirement = req.requirement_string
|
|
58
|
+
next req if requirement.nil?
|
|
59
|
+
next req if requirement.include?(",")
|
|
59
60
|
|
|
60
|
-
property_name = req.
|
|
61
|
+
property_name = req.metadata_string("property_name")
|
|
61
62
|
next req if property_name && !properties_to_update.include?(property_name)
|
|
62
63
|
|
|
63
|
-
new_req = update_requirement(
|
|
64
|
-
next req if new_req ==
|
|
64
|
+
new_req = update_requirement(requirement)
|
|
65
|
+
next req if new_req == requirement
|
|
65
66
|
|
|
66
67
|
Dependabot::DependencyRequirement.create(req.merge(requirement: new_req, source: updated_source))
|
|
67
68
|
end
|
|
@@ -107,7 +107,7 @@ module Dependabot
|
|
|
107
107
|
def updated_requirements
|
|
108
108
|
property_names =
|
|
109
109
|
declarations_using_a_property
|
|
110
|
-
.
|
|
110
|
+
.filter_map { |req| req.metadata_string("property_name") }
|
|
111
111
|
|
|
112
112
|
RequirementsUpdater.new(
|
|
113
113
|
requirements: dependency.requirements,
|
|
@@ -120,8 +120,8 @@ module Dependabot
|
|
|
120
120
|
sig { override.returns(T::Boolean) }
|
|
121
121
|
def requirements_unlocked_or_can_be?
|
|
122
122
|
declarations_using_a_property.none? do |requirement|
|
|
123
|
-
prop_name = requirement.
|
|
124
|
-
pom = dependency_files.find { |f| f.name == requirement
|
|
123
|
+
prop_name = requirement.metadata_string("property_name")
|
|
124
|
+
pom = dependency_files.find { |f| f.name == requirement.file }
|
|
125
125
|
|
|
126
126
|
return false unless prop_name && pom
|
|
127
127
|
|
|
@@ -217,17 +217,16 @@ module Dependabot
|
|
|
217
217
|
sig { returns(T::Boolean) }
|
|
218
218
|
def version_comes_from_multi_dependency_property?
|
|
219
219
|
declarations_using_a_property.any? do |requirement|
|
|
220
|
-
property_name =
|
|
221
|
-
property_source = requirement.
|
|
222
|
-
.fetch(:property_source)
|
|
220
|
+
property_name = T.must(requirement.metadata_string("property_name"))
|
|
221
|
+
property_source = requirement.metadata_string("property_source")
|
|
223
222
|
|
|
224
223
|
all_property_based_dependencies.any? do |dep|
|
|
225
224
|
next false if dep.name == dependency.name
|
|
226
225
|
|
|
227
226
|
dep.requirements.any? do |req|
|
|
228
|
-
next unless req.
|
|
227
|
+
next unless req.metadata_string("property_name") == property_name
|
|
229
228
|
|
|
230
|
-
req.
|
|
229
|
+
req.metadata_string("property_source") == property_source
|
|
231
230
|
end
|
|
232
231
|
end
|
|
233
232
|
end
|
|
@@ -237,7 +236,7 @@ module Dependabot
|
|
|
237
236
|
def declarations_using_a_property
|
|
238
237
|
@declarations_using_a_property ||=
|
|
239
238
|
dependency.requirements
|
|
240
|
-
.select { |req| req.
|
|
239
|
+
.select { |req| req.metadata_string("property_name") }
|
|
241
240
|
end
|
|
242
241
|
|
|
243
242
|
sig { returns(T::Array[Dependabot::Dependency]) }
|
|
@@ -247,14 +246,14 @@ module Dependabot
|
|
|
247
246
|
dependency_files: dependency_files,
|
|
248
247
|
source: nil
|
|
249
248
|
).parse.select do |dep|
|
|
250
|
-
dep.requirements.any? { |req| req.
|
|
249
|
+
dep.requirements.any? { |req| req.metadata_string("property_name") }
|
|
251
250
|
end
|
|
252
251
|
end
|
|
253
252
|
|
|
254
253
|
sig { returns(T::Boolean) }
|
|
255
254
|
def version_comes_from_project_parent_version?
|
|
256
255
|
declarations_using_a_property.any? do |requirement|
|
|
257
|
-
requirement.
|
|
256
|
+
requirement.metadata_string("property_name") == "project.parent.version"
|
|
258
257
|
end
|
|
259
258
|
end
|
|
260
259
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-maven
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.391.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.
|
|
18
|
+
version: 0.391.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.
|
|
25
|
+
version: 0.391.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: rexml
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -292,7 +292,7 @@ licenses:
|
|
|
292
292
|
- MIT
|
|
293
293
|
metadata:
|
|
294
294
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
295
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
295
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.391.0
|
|
296
296
|
rdoc_options: []
|
|
297
297
|
require_paths:
|
|
298
298
|
- lib
|