dependabot-maven 0.319.1 → 0.320.1
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24dcdf6874641aec6d60da3c09b81c70878cc61e754b0809e6246f9265a1b831
|
4
|
+
data.tar.gz: 2dce537d8680b9eb276b2a12010261ad6be4824140d1cf277b92743cc89304a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 155fcc04c0b1323649702406c89c6bf9079a17007ea51053de3b1f1a372220c4948b3c9325cee0091ef6dae37fd293dd22bcbf1a2ac237b066599ce3318136a7
|
7
|
+
data.tar.gz: 51b8c75dceb8a7fbca841478dbe7a6278cdfc5cee4c9782dd29577a44a5a59f9e478dd8f11cdc41a169aea29b6b07f88e9aa62b8061bfa3ff85583d2faedee96
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require "nokogiri"
|
5
|
+
require "rexml/document"
|
5
6
|
require "sorbet-runtime"
|
6
7
|
require "dependabot/file_updaters"
|
7
8
|
require "dependabot/file_updaters/base"
|
@@ -149,43 +150,40 @@ module Dependabot
|
|
149
150
|
).returns(String)
|
150
151
|
end
|
151
152
|
def add_new_declaration(content, dependency, requirement) # rubocop:disable Metrics/AbcSize
|
152
|
-
doc =
|
153
|
-
doc.
|
154
|
-
|
155
|
-
project = doc.at_xpath("//project")
|
153
|
+
doc = REXML::Document.new(content)
|
154
|
+
project = doc.get_elements("//project").first
|
156
155
|
raise "<project> element not found in the XML content" unless project
|
157
156
|
|
158
|
-
|
159
|
-
|
160
|
-
dependency_management = Nokogiri::XML::Node.new("dependencyManagement", doc)
|
161
|
-
dependencies = Nokogiri::XML::Node.new("dependencies", doc)
|
162
|
-
dependency_management.add_child(dependencies)
|
163
|
-
project.add_child(dependency_management)
|
164
|
-
end
|
157
|
+
# Detect indentation of the file from indentation of the project tag children
|
158
|
+
indentation_config = detect_indentation_config(project)
|
165
159
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
dependency_management.add_child(dependencies)
|
170
|
-
end
|
160
|
+
dependency_management, dependency_management_created = ensure_dependency_management_element(project,
|
161
|
+
indentation_config)
|
162
|
+
dependencies, dependencies_created = ensure_dependencies_element(dependency_management, indentation_config)
|
171
163
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
164
|
+
if dependencies.children.last&.to_s&.start_with?("\n")
|
165
|
+
dependencies.children.last.value = "\n#{indentation_config[:levels][:dependencies]}"
|
166
|
+
else
|
167
|
+
dependencies.add_text("\n#{indentation_config[:levels][:dependencies]}")
|
168
|
+
end
|
177
169
|
|
178
|
-
|
179
|
-
|
180
|
-
|
170
|
+
# Create the dependency element with the required fields, adding the appropriate indentation as text nodes
|
171
|
+
add_dependency_entry(dependency, requirement, dependencies, indentation_config[:levels][:dependency],
|
172
|
+
indentation_config[:levels][:dependencies])
|
181
173
|
|
182
|
-
|
183
|
-
|
184
|
-
|
174
|
+
# Close all sections with appropriate indentation
|
175
|
+
dependencies.add_text("\n#{indentation_config[:levels][:dependency_management]}")
|
176
|
+
dependency_management.add_text("\n#{indentation_config[:levels][:base]}") if dependencies_created
|
177
|
+
project.add_text("\n") if dependency_management_created
|
185
178
|
|
186
|
-
|
179
|
+
# If dependencyManagement was created, replace entire document content with parser output
|
180
|
+
# Unfortunately, this might include unrelated formatting changes sometimes
|
181
|
+
return doc.to_s if dependency_management_created
|
187
182
|
|
188
|
-
|
183
|
+
# If dependencyManagement was not created, we just replace the existing dependencyManagement element
|
184
|
+
# with the updated one, preserving the rest of the document
|
185
|
+
content.gsub(%r{\<dependencyManagement\>[\s\S]*\</dependencyManagement\>},
|
186
|
+
dependency_management.to_s)
|
189
187
|
end
|
190
188
|
|
191
189
|
sig do
|
@@ -267,6 +265,90 @@ module Dependabot
|
|
267
265
|
T.nilable(T::Array[Dependabot::DependencyFile])
|
268
266
|
)
|
269
267
|
end
|
268
|
+
|
269
|
+
sig do
|
270
|
+
params(project: REXML::Element,
|
271
|
+
indent_config: T::Hash[Symbol, T.untyped]).returns([REXML::Element, T::Boolean])
|
272
|
+
end
|
273
|
+
def ensure_dependency_management_element(project, indent_config)
|
274
|
+
dependency_management = project.get_elements("dependencyManagement").first
|
275
|
+
is_created = false
|
276
|
+
|
277
|
+
unless dependency_management
|
278
|
+
project.add_text("\n#{indent_config[:levels][:base]}")
|
279
|
+
dependency_management = REXML::Element.new("dependencyManagement", project)
|
280
|
+
is_created = true
|
281
|
+
end
|
282
|
+
|
283
|
+
[dependency_management, is_created]
|
284
|
+
end
|
285
|
+
|
286
|
+
sig do
|
287
|
+
params(dependency_management: REXML::Element,
|
288
|
+
indent_config: T::Hash[Symbol, T.untyped]).returns([REXML::Element, T::Boolean])
|
289
|
+
end
|
290
|
+
def ensure_dependencies_element(dependency_management, indent_config)
|
291
|
+
dependencies = dependency_management.get_elements("dependencies").first
|
292
|
+
is_created = false
|
293
|
+
|
294
|
+
unless dependencies
|
295
|
+
dependency_management.add_text("\n#{indent_config[:levels][:dependency_management]}")
|
296
|
+
dependencies = REXML::Element.new("dependencies", dependency_management)
|
297
|
+
is_created = true
|
298
|
+
end
|
299
|
+
|
300
|
+
[dependencies, is_created]
|
301
|
+
end
|
302
|
+
|
303
|
+
sig do
|
304
|
+
params(dependency: Dependabot::Dependency, requirement: T::Hash[Symbol, T.untyped],
|
305
|
+
dependencies_node: REXML::Element, current_indentation_level: String,
|
306
|
+
parent_indentation_level: String).void
|
307
|
+
end
|
308
|
+
def add_dependency_entry(dependency, requirement, dependencies_node, current_indentation_level,
|
309
|
+
parent_indentation_level)
|
310
|
+
dependency_node = REXML::Element.new("dependency", dependencies_node)
|
311
|
+
dependency_node.add_text("\n#{current_indentation_level}")
|
312
|
+
group_id = REXML::Element.new("groupId", dependency_node)
|
313
|
+
group_id.text = dependency.name.split(":").first
|
314
|
+
dependency_node.add_text("\n#{current_indentation_level}")
|
315
|
+
artifact_id = REXML::Element.new("artifactId", dependency_node)
|
316
|
+
artifact_id.text = dependency.name.split(":").last
|
317
|
+
dependency_node.add_text("\n#{current_indentation_level}")
|
318
|
+
version = REXML::Element.new("version", dependency_node)
|
319
|
+
version.text = requirement.fetch(:requirement)
|
320
|
+
dependency_node.add_text("\n#{parent_indentation_level}")
|
321
|
+
end
|
322
|
+
|
323
|
+
sig { params(base_indentation: String, is_tabs: T::Boolean).returns(Integer) }
|
324
|
+
def get_indent_size(base_indentation, is_tabs)
|
325
|
+
if is_tabs
|
326
|
+
indent_size = base_indentation.to_s.scan(/\t+$/).length
|
327
|
+
indent_size.positive? ? indent_size : 1
|
328
|
+
else
|
329
|
+
base_indentation.to_s.scan(/ +$/).last&.length || 2
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
sig { params(project: REXML::Element).returns(T::Hash[Symbol, T.untyped]) }
|
334
|
+
def detect_indentation_config(project)
|
335
|
+
sample_indent = project.children.find do |child|
|
336
|
+
child.to_s.match?(/\n(\t+| +)$/)
|
337
|
+
end&.to_s&.match(/\n(\t+| +)$/)&.[](1)
|
338
|
+
|
339
|
+
base_indent = sample_indent || " "
|
340
|
+
|
341
|
+
{
|
342
|
+
base: base_indent,
|
343
|
+
is_tabs: base_indent.include?("\t"),
|
344
|
+
levels: {
|
345
|
+
base: base_indent,
|
346
|
+
dependency_management: base_indent + base_indent,
|
347
|
+
dependencies: base_indent + base_indent + base_indent,
|
348
|
+
dependency: base_indent + base_indent + base_indent + base_indent
|
349
|
+
}
|
350
|
+
}
|
351
|
+
end
|
270
352
|
end
|
271
353
|
end
|
272
354
|
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.320.1
|
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.320.1
|
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.320.1
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: debug
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -270,7 +270,7 @@ licenses:
|
|
270
270
|
- MIT
|
271
271
|
metadata:
|
272
272
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
273
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
273
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.320.1
|
274
274
|
rdoc_options: []
|
275
275
|
require_paths:
|
276
276
|
- lib
|