dependabot-core 0.93.17 → 0.94.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/dependabot/dependency.rb +16 -21
  4. data/lib/dependabot/file_fetchers.rb +1 -5
  5. data/lib/dependabot/file_parsers.rb +1 -5
  6. data/lib/dependabot/file_updaters.rb +1 -5
  7. data/lib/dependabot/metadata_finders.rb +1 -5
  8. data/lib/dependabot/pull_request_creator/labeler.rb +26 -24
  9. data/lib/dependabot/update_checkers.rb +1 -5
  10. data/lib/dependabot/utils.rb +2 -12
  11. data/lib/dependabot/version.rb +1 -1
  12. metadata +1 -28
  13. data/lib/dependabot/file_fetchers/ruby/bundler.rb +0 -215
  14. data/lib/dependabot/file_fetchers/ruby/bundler/child_gemfile_finder.rb +0 -70
  15. data/lib/dependabot/file_fetchers/ruby/bundler/gemspec_finder.rb +0 -98
  16. data/lib/dependabot/file_fetchers/ruby/bundler/path_gemspec_finder.rb +0 -114
  17. data/lib/dependabot/file_fetchers/ruby/bundler/require_relative_finder.rb +0 -67
  18. data/lib/dependabot/file_parsers/ruby/bundler.rb +0 -294
  19. data/lib/dependabot/file_parsers/ruby/bundler/file_preparer.rb +0 -86
  20. data/lib/dependabot/file_parsers/ruby/bundler/gemfile_checker.rb +0 -48
  21. data/lib/dependabot/file_updaters/ruby/bundler.rb +0 -123
  22. data/lib/dependabot/file_updaters/ruby/bundler/gemfile_updater.rb +0 -116
  23. data/lib/dependabot/file_updaters/ruby/bundler/gemspec_dependency_name_finder.rb +0 -52
  24. data/lib/dependabot/file_updaters/ruby/bundler/gemspec_sanitizer.rb +0 -298
  25. data/lib/dependabot/file_updaters/ruby/bundler/gemspec_updater.rb +0 -64
  26. data/lib/dependabot/file_updaters/ruby/bundler/git_pin_replacer.rb +0 -80
  27. data/lib/dependabot/file_updaters/ruby/bundler/git_source_remover.rb +0 -102
  28. data/lib/dependabot/file_updaters/ruby/bundler/lockfile_updater.rb +0 -389
  29. data/lib/dependabot/file_updaters/ruby/bundler/requirement_replacer.rb +0 -223
  30. data/lib/dependabot/metadata_finders/ruby/bundler.rb +0 -202
  31. data/lib/dependabot/update_checkers/ruby/bundler.rb +0 -331
  32. data/lib/dependabot/update_checkers/ruby/bundler/file_preparer.rb +0 -281
  33. data/lib/dependabot/update_checkers/ruby/bundler/force_updater.rb +0 -261
  34. data/lib/dependabot/update_checkers/ruby/bundler/latest_version_finder.rb +0 -169
  35. data/lib/dependabot/update_checkers/ruby/bundler/requirements_updater.rb +0 -283
  36. data/lib/dependabot/update_checkers/ruby/bundler/ruby_requirement_setter.rb +0 -115
  37. data/lib/dependabot/update_checkers/ruby/bundler/shared_bundler_helpers.rb +0 -246
  38. data/lib/dependabot/update_checkers/ruby/bundler/version_resolver.rb +0 -272
  39. data/lib/dependabot/utils/ruby/requirement.rb +0 -26
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/file_updaters/ruby/bundler"
4
-
5
- module Dependabot
6
- module FileUpdaters
7
- module Ruby
8
- class Bundler
9
- class GemspecUpdater
10
- require_relative "requirement_replacer"
11
-
12
- def initialize(dependencies:, gemspec:)
13
- @dependencies = dependencies
14
- @gemspec = gemspec
15
- end
16
-
17
- def updated_gemspec_content
18
- content = gemspec.content
19
-
20
- dependencies.each do |dependency|
21
- content = replace_gemspec_version_requirement(
22
- gemspec, dependency, content
23
- )
24
- end
25
-
26
- content
27
- end
28
-
29
- private
30
-
31
- attr_reader :dependencies, :gemspec
32
-
33
- def replace_gemspec_version_requirement(gemspec, dependency, content)
34
- return content unless requirement_changed?(gemspec, dependency)
35
-
36
- updated_requirement =
37
- dependency.requirements.
38
- find { |r| r[:file] == gemspec.name }.
39
- fetch(:requirement)
40
-
41
- previous_requirement =
42
- dependency.previous_requirements.
43
- find { |r| r[:file] == gemspec.name }.
44
- fetch(:requirement)
45
-
46
- RequirementReplacer.new(
47
- dependency: dependency,
48
- file_type: :gemspec,
49
- updated_requirement: updated_requirement,
50
- previous_requirement: previous_requirement
51
- ).rewrite(content)
52
- end
53
-
54
- def requirement_changed?(file, dependency)
55
- changed_requirements =
56
- dependency.requirements - dependency.previous_requirements
57
-
58
- changed_requirements.any? { |f| f[:file] == file.name }
59
- end
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parser/current"
4
- require "dependabot/file_updaters/ruby/bundler"
5
-
6
- module Dependabot
7
- module FileUpdaters
8
- module Ruby
9
- class Bundler
10
- class GitPinReplacer
11
- attr_reader :dependency, :new_pin
12
-
13
- def initialize(dependency:, new_pin:)
14
- @dependency = dependency
15
- @new_pin = new_pin
16
- end
17
-
18
- def rewrite(content)
19
- buffer = Parser::Source::Buffer.new("(gemfile_content)")
20
- buffer.source = content
21
- ast = Parser::CurrentRuby.new.parse(buffer)
22
-
23
- Rewriter.
24
- new(dependency: dependency, new_pin: new_pin).
25
- rewrite(buffer, ast)
26
- end
27
-
28
- class Rewriter < Parser::TreeRewriter
29
- PIN_KEYS = %i(ref tag).freeze
30
- attr_reader :dependency, :new_pin
31
-
32
- def initialize(dependency:, new_pin:)
33
- @dependency = dependency
34
- @new_pin = new_pin
35
- end
36
-
37
- def on_send(node)
38
- return unless declares_targeted_gem?(node)
39
- return unless node.children.last.type == :hash
40
-
41
- kwargs_node = node.children.last
42
- kwargs_node.children.each do |hash_pair|
43
- next unless PIN_KEYS.include?(key_from_hash_pair(hash_pair))
44
-
45
- update_value(hash_pair)
46
- end
47
- end
48
-
49
- private
50
-
51
- def declares_targeted_gem?(node)
52
- return false unless node.children[1] == :gem
53
-
54
- node.children[2].children.first == dependency.name
55
- end
56
-
57
- def key_from_hash_pair(node)
58
- node.children.first.children.first.to_sym
59
- end
60
-
61
- def update_value(hash_pair)
62
- value_node = hash_pair.children.last
63
- open_quote_character, close_quote_character =
64
- extract_quote_characters_from(value_node)
65
-
66
- replace(
67
- value_node.loc.expression,
68
- %(#{open_quote_character}#{new_pin}#{close_quote_character})
69
- )
70
- end
71
-
72
- def extract_quote_characters_from(value_node)
73
- [value_node.loc.begin.source, value_node.loc.end.source]
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
80
- end
@@ -1,102 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parser/current"
4
- require "dependabot/file_updaters/ruby/bundler"
5
-
6
- module Dependabot
7
- module FileUpdaters
8
- module Ruby
9
- class Bundler
10
- class GitSourceRemover
11
- attr_reader :dependency
12
-
13
- def initialize(dependency:)
14
- @dependency = dependency
15
- end
16
-
17
- def rewrite(content)
18
- buffer = Parser::Source::Buffer.new("(gemfile_content)")
19
- buffer.source = content
20
- ast = Parser::CurrentRuby.new.parse(buffer)
21
-
22
- Rewriter.new(dependency: dependency).rewrite(buffer, ast)
23
- end
24
-
25
- class Rewriter < Parser::TreeRewriter
26
- # TODO: Hack until Bundler 1.16.0 is available on Heroku
27
- GOOD_KEYS = %i(
28
- group groups path glob name require platform platforms type
29
- source install_if
30
- ).freeze
31
-
32
- attr_reader :dependency
33
-
34
- def initialize(dependency:)
35
- @dependency = dependency
36
- end
37
-
38
- def on_send(node)
39
- return unless declares_targeted_gem?(node)
40
- return unless node.children.last.type == :hash
41
-
42
- kwargs_node = node.children.last
43
- keys = kwargs_node.children.map do |hash_pair|
44
- key_from_hash_pair(hash_pair)
45
- end
46
-
47
- if keys.none? { |key| GOOD_KEYS.include?(key) }
48
- remove_all_kwargs(node)
49
- else
50
- remove_git_related_kwargs(kwargs_node)
51
- end
52
- end
53
-
54
- private
55
-
56
- def declares_targeted_gem?(node)
57
- return false unless node.children[1] == :gem
58
-
59
- node.children[2].children.first == dependency.name
60
- end
61
-
62
- def key_from_hash_pair(node)
63
- node.children.first.children.first.to_sym
64
- end
65
-
66
- def remove_all_kwargs(node)
67
- kwargs_node = node.children.last
68
-
69
- range_to_remove =
70
- kwargs_node.loc.expression.join(node.children[-2].loc.end.end)
71
-
72
- remove(range_to_remove)
73
- end
74
-
75
- def remove_git_related_kwargs(kwargs_node)
76
- good_key_index = nil
77
- hash_pairs = kwargs_node.children
78
-
79
- hash_pairs.each_with_index do |hash_pair, index|
80
- if GOOD_KEYS.include?(key_from_hash_pair(hash_pair))
81
- good_key_index = index
82
- next
83
- end
84
-
85
- range_to_remove =
86
- if good_key_index.nil?
87
- next_arg_start = hash_pairs[index + 1].loc.expression.begin
88
- hash_pair.loc.expression.join(next_arg_start)
89
- else
90
- last_arg_end = hash_pairs[good_key_index].loc.expression.end
91
- hash_pair.loc.expression.join(last_arg_end)
92
- end
93
-
94
- remove(range_to_remove)
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end
101
- end
102
- end
@@ -1,389 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler"
4
-
5
- require "bundler_definition_ruby_version_patch"
6
- require "bundler_definition_bundler_version_patch"
7
- require "bundler_git_source_patch"
8
-
9
- require "dependabot/shared_helpers"
10
- require "dependabot/errors"
11
- require "dependabot/file_updaters/ruby/bundler"
12
- require "dependabot/git_commit_checker"
13
-
14
- # rubocop:disable Metrics/ClassLength
15
- module Dependabot
16
- module FileUpdaters
17
- module Ruby
18
- class Bundler
19
- class LockfileUpdater
20
- require_relative "gemfile_updater"
21
- require_relative "gemspec_updater"
22
- require_relative "gemspec_sanitizer"
23
- require_relative "gemspec_dependency_name_finder"
24
-
25
- LOCKFILE_ENDING =
26
- /(?<ending>\s*(?:RUBY VERSION|BUNDLED WITH).*)/m.freeze
27
- GIT_DEPENDENCIES_SECTION = /GIT\n.*?\n\n(?!GIT)/m.freeze
28
- GIT_DEPENDENCY_DETAILS = /GIT\n.*?\n\n/m.freeze
29
- GEM_NOT_FOUND_ERROR_REGEX =
30
- /locked to (?<name>[^\s]+) \(|not find (?<name>[^\s]+)-\d/.freeze
31
- RETRYABLE_ERRORS = [::Bundler::HTTPError].freeze
32
-
33
- # Can't be a constant because some of these don't exist in bundler
34
- # 1.15, which Heroku uses, which causes an exception on boot.
35
- def gemspec_sources
36
- [
37
- ::Bundler::Source::Path,
38
- ::Bundler::Source::Gemspec
39
- ]
40
- end
41
-
42
- def initialize(dependencies:, dependency_files:, credentials:)
43
- @dependencies = dependencies
44
- @dependency_files = dependency_files
45
- @credentials = credentials
46
- end
47
-
48
- def updated_lockfile_content
49
- @updated_lockfile_content ||=
50
- begin
51
- updated_content = build_updated_lockfile
52
-
53
- if lockfile.content == updated_content
54
- raise "Expected content to change!"
55
- end
56
-
57
- updated_content
58
- end
59
- end
60
-
61
- private
62
-
63
- attr_reader :dependencies, :dependency_files, :credentials
64
-
65
- def build_updated_lockfile
66
- base_dir = dependency_files.first.directory
67
- lockfile_body =
68
- SharedHelpers.in_a_temporary_directory(base_dir) do |tmp_dir|
69
- write_temporary_dependency_files
70
-
71
- SharedHelpers.in_a_forked_process do
72
- # Set the path for path gemspec correctly
73
- ::Bundler.instance_variable_set(:@root, tmp_dir)
74
-
75
- # Remove installed gems from the default Rubygems index
76
- ::Gem::Specification.all = []
77
-
78
- # Set auth details
79
- relevant_credentials.each do |cred|
80
- token = cred["token"] ||
81
- "#{cred['username']}:#{cred['password']}"
82
-
83
- ::Bundler.settings.set_command_option(
84
- cred.fetch("host"),
85
- token.gsub("@", "%40F").gsub("?", "%3F")
86
- )
87
- end
88
-
89
- generate_lockfile
90
- end
91
- end
92
- post_process_lockfile(lockfile_body)
93
- end
94
-
95
- def write_temporary_dependency_files
96
- File.write(gemfile.name, updated_gemfile_content(gemfile))
97
- File.write(lockfile.name, sanitized_lockfile_body)
98
-
99
- top_level_gemspecs.each do |gemspec|
100
- path = gemspec.name
101
- FileUtils.mkdir_p(Pathname.new(path).dirname)
102
- updated_content = updated_gemspec_content(gemspec)
103
- File.write(path, sanitized_gemspec_content(updated_content))
104
- end
105
-
106
- write_ruby_version_file
107
- write_path_gemspecs
108
- write_imported_ruby_files
109
-
110
- evaled_gemfiles.each do |file|
111
- path = file.name
112
- FileUtils.mkdir_p(Pathname.new(path).dirname)
113
- File.write(path, updated_gemfile_content(file))
114
- end
115
- end
116
-
117
- def generate_lockfile
118
- dependencies_to_unlock = dependencies.map(&:name)
119
-
120
- begin
121
- definition = build_definition(dependencies_to_unlock)
122
-
123
- old_reqs = lock_deps_being_updated_to_exact_versions(definition)
124
-
125
- definition.resolve_remotely!
126
-
127
- old_reqs.each do |dep_name, old_req|
128
- d_dep = definition.dependencies.find { |d| d.name == dep_name }
129
- if old_req == :none then definition.dependencies.delete(d_dep)
130
- else d_dep.instance_variable_set(:@requirement, old_req)
131
- end
132
- end
133
-
134
- definition.to_lock
135
- rescue ::Bundler::GemNotFound => error
136
- unlock_yanked_gem(dependencies_to_unlock, error) && retry
137
- rescue ::Bundler::VersionConflict => error
138
- unlock_blocking_subdeps(dependencies_to_unlock, error) && retry
139
- rescue *RETRYABLE_ERRORS
140
- raise if @retrying
141
-
142
- @retrying = true
143
- sleep(rand(1.0..5.0))
144
- retry
145
- end
146
- end
147
-
148
- def unlock_yanked_gem(dependencies_to_unlock, error)
149
- raise unless error.message.match?(GEM_NOT_FOUND_ERROR_REGEX)
150
-
151
- gem_name = error.message.match(GEM_NOT_FOUND_ERROR_REGEX).
152
- named_captures["name"]
153
- raise if dependencies_to_unlock.include?(gem_name)
154
-
155
- dependencies_to_unlock << gem_name
156
- end
157
-
158
- def unlock_blocking_subdeps(dependencies_to_unlock, error)
159
- all_deps = ::Bundler::LockfileParser.new(sanitized_lockfile_body).
160
- specs.map(&:name).map(&:to_s)
161
- top_level = build_definition([]).dependencies.
162
- map(&:name).map(&:to_s)
163
- allowed_new_unlocks = all_deps - top_level - dependencies_to_unlock
164
-
165
- # Unlock any sub-dependencies that Bundler reports caused the
166
- # conflict
167
- potentials_deps =
168
- error.cause.conflicts.values.
169
- flat_map(&:requirement_trees).
170
- map do |tree|
171
- tree.find { |req| allowed_new_unlocks.include?(req.name) }
172
- end.compact.map(&:name)
173
-
174
- # If there's nothing more we can unlock, give up
175
- raise if potentials_deps.none?
176
-
177
- dependencies_to_unlock.append(*potentials_deps)
178
- end
179
-
180
- def build_definition(dependencies_to_unlock)
181
- defn = ::Bundler::Definition.build(
182
- gemfile.name,
183
- lockfile.name,
184
- gems: dependencies_to_unlock
185
- )
186
-
187
- # Bundler unlocks the sub-dependencies of gems it is passed even
188
- # if those sub-deps are top-level dependencies. We only want true
189
- # subdeps unlocked, like they were in the UpdateChecker, so we
190
- # mutate the unlocked gems array.
191
- unlocked = defn.instance_variable_get(:@unlock).fetch(:gems)
192
- must_not_unlock = defn.dependencies.map(&:name).map(&:to_s) -
193
- dependencies_to_unlock
194
- unlocked.reject! { |n| must_not_unlock.include?(n) }
195
-
196
- defn
197
- end
198
-
199
- def lock_deps_being_updated_to_exact_versions(definition)
200
- dependencies.each_with_object({}) do |dep, old_reqs|
201
- defn_dep = definition.dependencies.find { |d| d.name == dep.name }
202
-
203
- if defn_dep.nil?
204
- definition.dependencies <<
205
- ::Bundler::Dependency.new(dep.name, dep.version)
206
- old_reqs[dep.name] = :none
207
- elsif git_dependency?(dep) &&
208
- defn_dep.source.is_a?(::Bundler::Source::Git)
209
- defn_dep.source.unlock!
210
- elsif Gem::Version.correct?(dep.version)
211
- new_req = Gem::Requirement.create("= #{dep.version}")
212
- old_reqs[dep.name] = defn_dep.requirement
213
- defn_dep.instance_variable_set(:@requirement, new_req)
214
- end
215
- end
216
- end
217
-
218
- def write_ruby_version_file
219
- return unless ruby_version_file
220
-
221
- path = ruby_version_file.name
222
- FileUtils.mkdir_p(Pathname.new(path).dirname)
223
- File.write(path, ruby_version_file.content)
224
- end
225
-
226
- def write_path_gemspecs
227
- path_gemspecs.each do |file|
228
- path = file.name
229
- FileUtils.mkdir_p(Pathname.new(path).dirname)
230
- File.write(path, sanitized_gemspec_content(file.content))
231
- end
232
- end
233
-
234
- def write_imported_ruby_files
235
- imported_ruby_files.each do |file|
236
- path = file.name
237
- FileUtils.mkdir_p(Pathname.new(path).dirname)
238
- File.write(path, file.content)
239
- end
240
- end
241
-
242
- def path_gemspecs
243
- all = dependency_files.select { |f| f.name.end_with?(".gemspec") }
244
- all - top_level_gemspecs
245
- end
246
-
247
- def imported_ruby_files
248
- dependency_files.
249
- select { |f| f.name.end_with?(".rb") }.
250
- reject { |f| f.name == "gems.rb" }
251
- end
252
-
253
- def top_level_gemspecs
254
- dependency_files.
255
- select { |file| file.name.end_with?(".gemspec") }.
256
- reject(&:support_file?)
257
- end
258
-
259
- def ruby_version_file
260
- dependency_files.find { |f| f.name == ".ruby-version" }
261
- end
262
-
263
- def post_process_lockfile(lockfile_body)
264
- lockfile_body = reorder_git_dependencies(lockfile_body)
265
- replace_lockfile_ending(lockfile_body)
266
- end
267
-
268
- def reorder_git_dependencies(lockfile_body)
269
- new_section = lockfile_body.match(GIT_DEPENDENCIES_SECTION)&.to_s
270
- old_section = lockfile.content.match(GIT_DEPENDENCIES_SECTION)&.to_s
271
-
272
- return lockfile_body unless new_section && old_section
273
-
274
- new_deps = new_section.scan(GIT_DEPENDENCY_DETAILS)
275
- old_deps = old_section.scan(GIT_DEPENDENCY_DETAILS)
276
-
277
- return lockfile_body unless new_deps.count == old_deps.count
278
-
279
- reordered_new_section = new_deps.sort_by do |new_dep_details|
280
- remote = new_dep_details.match(/remote: (?<remote>.*\n)/)[:remote]
281
- i = old_deps.index { |details| details.include?(remote) }
282
-
283
- # If this dependency isn't in the old lockfile then we can't rely
284
- # on that (presumably outdated) lockfile to do reordering.
285
- # Instead, we just return the default-ordered content just
286
- # generated.
287
- return lockfile_body unless i
288
-
289
- i
290
- end.join
291
-
292
- lockfile_body.gsub(new_section, reordered_new_section)
293
- end
294
-
295
- def replace_lockfile_ending(lockfile_body)
296
- # Re-add the old `BUNDLED WITH` version (and remove the RUBY VERSION
297
- # if it wasn't previously present in the lockfile)
298
- lockfile_body.gsub(
299
- LOCKFILE_ENDING,
300
- lockfile.content.match(LOCKFILE_ENDING)&.[](:ending) || "\n"
301
- )
302
- end
303
-
304
- def sanitized_gemspec_content(gemspec_content)
305
- new_version = replacement_version_for_gemspec(gemspec_content)
306
-
307
- GemspecSanitizer.
308
- new(replacement_version: new_version).
309
- rewrite(gemspec_content)
310
- end
311
-
312
- def replacement_version_for_gemspec(gemspec_content)
313
- return "0.0.1" unless lockfile
314
-
315
- gemspec_specs =
316
- ::Bundler::LockfileParser.new(sanitized_lockfile_body).specs.
317
- select { |s| gemspec_sources.include?(s.source.class) }
318
-
319
- gem_name =
320
- GemspecDependencyNameFinder.new(gemspec_content: gemspec_content).
321
- dependency_name
322
-
323
- return gemspec_specs.first&.version || "0.0.1" unless gem_name
324
-
325
- spec = gemspec_specs.find { |s| s.name == gem_name }
326
- spec&.version || gemspec_specs.first&.version || "0.0.1"
327
- end
328
-
329
- def relevant_credentials
330
- credentials.select do |cred|
331
- next true if cred["type"] == "git_source"
332
- next true if cred["type"] == "rubygems_server"
333
-
334
- false
335
- end
336
- end
337
-
338
- def updated_gemfile_content(file)
339
- GemfileUpdater.new(
340
- dependencies: dependencies,
341
- gemfile: file
342
- ).updated_gemfile_content
343
- end
344
-
345
- def updated_gemspec_content(gemspec)
346
- GemspecUpdater.new(
347
- dependencies: dependencies,
348
- gemspec: gemspec
349
- ).updated_gemspec_content
350
- end
351
-
352
- def gemfile
353
- @gemfile ||= dependency_files.find { |f| f.name == "Gemfile" } ||
354
- dependency_files.find { |f| f.name == "gems.rb" }
355
- end
356
-
357
- def lockfile
358
- @lockfile ||=
359
- dependency_files.find { |f| f.name == "Gemfile.lock" } ||
360
- dependency_files.find { |f| f.name == "gems.locked" }
361
- end
362
-
363
- def sanitized_lockfile_body
364
- lockfile.content.gsub(LOCKFILE_ENDING, "")
365
- end
366
-
367
- def evaled_gemfiles
368
- @evaled_gemfiles ||=
369
- dependency_files.
370
- reject { |f| f.name.end_with?(".gemspec") }.
371
- reject { |f| f.name.end_with?(".lock") }.
372
- reject { |f| f.name.end_with?(".ruby-version") }.
373
- reject { |f| f.name == "Gemfile" }.
374
- reject { |f| f.name == "gems.rb" }.
375
- reject { |f| f.name == "gems.locked" }
376
- end
377
-
378
- def git_dependency?(dep)
379
- GitCommitChecker.new(
380
- dependency: dep,
381
- credentials: credentials
382
- ).git_dependency?
383
- end
384
- end
385
- end
386
- end
387
- end
388
- end
389
- # rubocop:enable Metrics/ClassLength