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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '080903718c6b555bd8c1ccec35b6948489371fd7780b8b4f4b2245bf165b4553'
4
- data.tar.gz: cdaa999ecefd1c4d258fffe994e693ed6e513517d9cf8a19c2636d836efc92ad
3
+ metadata.gz: e291e2478cd805665628ff741f4bf0b36a80c9297c20aa4219080f32155f30a3
4
+ data.tar.gz: f155a760998f79499829ce17fecea84c3a288f96ee302e70774d2dee66824b64
5
5
  SHA512:
6
- metadata.gz: 5a77aa339debbaa843309fc30d1c5dfaea68c6cd04bd2cb028b10f950cf11c2b9ceb38b325b33505e45500e2dd25c5cb687dd07a828ead1fc9528fe501679158
7
- data.tar.gz: 673d58a9c21b555e0ee4161bea4a8bfe05d1dea29c3c8b7be907067b781e85ccc6ec2c2432b8063a876aaa4394fb4fb227c8f14397ef9d7fc54348aca1d6f808
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
- name_parts = [
96
- base_path,
97
- relative_path,
98
- relative_path.end_with?(".xml") ? nil : "pom.xml"
99
- ].compact.reject(&:empty?)
100
- path = Pathname.new(File.join(name_parts)).cleanpath.to_path
101
-
102
- next [] if fetched_filenames.include?(path)
103
-
104
- next [] if Dependabot::FileFiltering.should_exclude_path?(path, "file from final collection", @exclude_paths)
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
- rescue Dependabot::DependencyFileNotFound
117
- fetch_file_from_host(T.must(path), fetch_submodules: true)
118
+ end
119
+ end
118
120
 
119
- [] # Ignore any child submodules (since we can't update them)
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
- next if used_indices.include?(i) || dep_scan_req.dig(:metadata, :pom_file).nil?
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
- dep_scan_req.dig(:metadata, :pom_file) == parsing_req.fetch(:file)
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[:requirement],
526
- file: parsing_req[:file],
527
- groups: [*dep_scan_req[:groups], *parsing_req[:groups]].uniq.compact,
528
- source: dep_scan_req[:source],
529
- metadata: merge_metadata(dep_scan_req[:metadata], parsing_req[:metadata])
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: T::Hash[Symbol, Object],
549
- metadata2: T::Hash[Symbol, Object]
550
- ).returns(T::Hash[Symbol, Object])
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(Requirement) }
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: 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 = 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.fetch(:file) || declaring_requirement.dig(:metadata, :pom_file)
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.fetch(:groups) == ["plugin"] || scope_matches?(node)
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.dig(:metadata, :property_name)
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 == declaring_requirement[:metadata][:property_name]
128
+ property_name == declaring_property_name
128
129
  else
129
- node_requirement == declaring_requirement.fetch(: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.dig(:metadata, :packaging_type)
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&.dig(:metadata, :classifier)
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.fetch(:groups)
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[:file] == T.must(old_req)[:file]
71
- next if new_req[:requirement] == T.must(old_req)[:requirement]
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.let(new_req.fetch(:file) || new_req.dig(:metadata, :pom_file), String)
74
- if new_req.dig(:metadata, :property_name)
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 = req.fetch(:metadata).fetch(: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.fetch(:file) }),
104
- updated_value: req.fetch(:requirement)
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.fetch(:requirement)
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
- requirement.fetch(:requirement)
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 = requirement.fetch(:requirement)
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 = T.let(dependency, Dependabot::Dependency)
31
- @dependency_files = T.let(dependency_files, T::Array[Dependabot::DependencyFile])
32
- @credentials = T.let(credentials, T::Array[Dependabot::Credential])
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
- filename = dependency.requirements.first&.fetch(:file) ||
127
- dependency.requirements.first&.dig(:metadata, :pom_file)
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 = T.let(/\A#{PATTERN_RAW}\z/, Regexp)
18
+ PATTERN = /\A#{PATTERN_RAW}\z/
19
19
  # Like PATTERN, but the leading operator is required
20
- RUBY_STYLE_PATTERN = T.let(/\A\s*(#{quoted})\s*(#{Maven::Version::VERSION_PATTERN})\s*\z/, Regexp)
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
- source = dependency.requirements
174
- .find { |r| r.fetch(:source) }&.fetch(:source)
173
+ requirement = dependency.requirements.find(&:source)
174
+ return central_repo_url unless requirement
175
175
 
176
- source&.fetch(:url, nil) ||
177
- source&.fetch("url", nil) ||
178
- central_repo_url
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 = T.let("maven-metadata.xml", String)
21
- REPOSITORY_TYPE = T.let("maven_repository", String)
22
- URL_KEY = T.let("url", String)
23
- AUTH_HEADERS_KEY = T.let("auth_headers", String)
24
- DEFAULT_CENTRAL_REPO_URL = T.let("https://repo.maven.apache.org/maven2", String)
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
- type = dependency.requirements.first&.dig(:metadata, :packaging_type) || "jar"
87
- classifier = dependency.requirements.first&.dig(:metadata, :classifier)
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&.dig(:metadata, :classifier)
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),
@@ -21,7 +21,7 @@ module Dependabot
21
21
 
22
22
  sig { params(dependency_files: T::Array[DependencyFile]).void }
23
23
  def initialize(dependency_files:)
24
- @dependency_files = T.let(dependency_files, T::Array[DependencyFile])
24
+ @dependency_files = dependency_files
25
25
  end
26
26
 
27
27
  sig do
@@ -14,7 +14,7 @@ module Dependabot
14
14
 
15
15
  abstract!
16
16
 
17
- OR_SYNTAX = T.let(/(?<=\]|\)),/, Regexp)
17
+ OR_SYNTAX = /(?<=\]|\)),/
18
18
 
19
19
  sig { abstract.returns(Regexp) }
20
20
  def self.pattern; end
@@ -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 = T.let(
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 = T.cast(req.fetch(:requirement), T.nilable(String)).to_s
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.dig(:metadata, :property_name) == property_name
125
+ next unless r.metadata_string("property_name") == property_name
126
126
 
127
- r.dig(:metadata, :property_source) == property_source
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.dig(:metadata, :property_name) }
139
- &.dig(:metadata, :property_name),
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.dig(:metadata, :property_name) == property_name }
153
- &.dig(:metadata, :property_source),
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.fetch(:file) }
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.fetch(:file)} for property #{property_name}"
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.dig(:metadata, :property_name) == property_name
215
+ next false unless r.metadata_string("property_name") == property_name
216
216
 
217
- r.dig(:metadata, :property_source) == property_source
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
- next req if req.fetch(:requirement).nil?
58
- next req if req.fetch(:requirement).include?(",")
57
+ requirement = req.requirement_string
58
+ next req if requirement.nil?
59
+ next req if requirement.include?(",")
59
60
 
60
- property_name = req.dig(:metadata, :property_name)
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(req[:requirement])
64
- next req if new_req == req[:requirement]
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
- .map { |req| req.dig(:metadata, :property_name) }
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.dig(:metadata, :property_name)
124
- pom = dependency_files.find { |f| f.name == requirement[:file] }
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 = requirement.fetch(:metadata).fetch(:property_name)
221
- property_source = requirement.fetch(:metadata)
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.dig(:metadata, :property_name) == property_name
227
+ next unless req.metadata_string("property_name") == property_name
229
228
 
230
- req.dig(:metadata, :property_source) == property_source
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.dig(:metadata, :property_name) }
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.dig(:metadata, :property_name) }
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.dig(:metadata, :property_name) == "project.parent.version"
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.390.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.390.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.390.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.390.0
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