dependabot-core 0.89.2 → 0.89.3
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/CHANGELOG.md +4 -0
- data/lib/dependabot/file_fetchers/ruby/bundler.rb +36 -8
- data/lib/dependabot/file_fetchers/ruby/bundler/gemspec_finder.rb +98 -0
- data/lib/dependabot/file_parsers/ruby/bundler.rb +5 -6
- data/lib/dependabot/file_parsers/ruby/bundler/file_preparer.rb +2 -1
- data/lib/dependabot/file_updaters/ruby/bundler.rb +4 -2
- data/lib/dependabot/file_updaters/ruby/bundler/lockfile_updater.rb +7 -5
- data/lib/dependabot/pull_request_creator.rb +1 -3
- data/lib/dependabot/pull_request_creator/branch_namer.rb +1 -1
- data/lib/dependabot/pull_request_creator/message_builder.rb +1 -2
- data/lib/dependabot/update_checkers/ruby/bundler/file_preparer.rb +5 -2
- data/lib/dependabot/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68b24cb423c178ba9f593779aba15d90eb2c63608a4533526afd1715a62fdac3
|
4
|
+
data.tar.gz: dfdc7b94a470329a808c01ea05e0412238c4596d16e22b540ea0e900e0847a62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cc690016b52d4f1586c894f5e57e51184c5c7c1c09ff8968079caec11ca9f647850642418885c95e5ada945ac692e2eaf0ef28727160bb752006076072ccc67
|
7
|
+
data.tar.gz: 28de24c17cc0f5c66c02b2130a389e8426a1450d1842b1edb4e17832169442813f38975c17115221eaa42abd567df3579e6b9ab4f40cf1d76d6d277e02aace14
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,7 @@ module Dependabot
|
|
8
8
|
module FileFetchers
|
9
9
|
module Ruby
|
10
10
|
class Bundler < Dependabot::FileFetchers::Base
|
11
|
+
require "dependabot/file_fetchers/ruby/bundler/gemspec_finder"
|
11
12
|
require "dependabot/file_fetchers/ruby/bundler/path_gemspec_finder"
|
12
13
|
require "dependabot/file_fetchers/ruby/bundler/child_gemfile_finder"
|
13
14
|
require "dependabot/file_fetchers/ruby/bundler/require_relative_finder"
|
@@ -30,19 +31,27 @@ module Dependabot
|
|
30
31
|
fetched_files = []
|
31
32
|
fetched_files << gemfile if gemfile
|
32
33
|
fetched_files << lockfile if gemfile && lockfile
|
34
|
+
fetched_files += child_gemfiles
|
33
35
|
fetched_files += gemspecs
|
34
36
|
fetched_files << ruby_version_file if ruby_version_file
|
35
|
-
fetched_files += child_gemfiles
|
36
37
|
fetched_files += path_gemspecs
|
37
38
|
fetched_files += require_relative_files(fetched_files)
|
38
39
|
|
40
|
+
fetched_files = uniq_files(fetched_files)
|
41
|
+
|
39
42
|
check_required_files_present
|
40
43
|
|
41
44
|
unless self.class.required_files_in?(fetched_files.map(&:name))
|
42
45
|
raise "Invalid set of files: #{fetched_files.map(&:name)}"
|
43
46
|
end
|
44
47
|
|
45
|
-
fetched_files
|
48
|
+
fetched_files
|
49
|
+
end
|
50
|
+
|
51
|
+
def uniq_files(fetched_files)
|
52
|
+
uniq_files = fetched_files.reject(&:support_file?).uniq
|
53
|
+
uniq_files += fetched_files.
|
54
|
+
reject { |f| uniq_files.map(&:name).include?(f.name) }
|
46
55
|
end
|
47
56
|
|
48
57
|
def check_required_files_present
|
@@ -64,12 +73,31 @@ module Dependabot
|
|
64
73
|
end
|
65
74
|
|
66
75
|
def gemspecs
|
67
|
-
gemspecs
|
68
|
-
|
76
|
+
return @gemspecs if defined?(@gemspecs)
|
77
|
+
|
78
|
+
gemspecs_paths =
|
79
|
+
gemspec_directories.
|
80
|
+
flat_map do |d|
|
81
|
+
repo_contents(dir: d).
|
82
|
+
select { |f| f.name.end_with?(".gemspec") }.
|
83
|
+
map { |f| File.join(d, f.name) }
|
84
|
+
end
|
85
|
+
|
86
|
+
@gemspecs = gemspecs_paths.map { |n| fetch_file_from_host(n) }
|
69
87
|
rescue Octokit::NotFound
|
70
88
|
[]
|
71
89
|
end
|
72
90
|
|
91
|
+
def gemspec_directories
|
92
|
+
gemfiles = ([gemfile] + child_gemfiles).compact
|
93
|
+
directories =
|
94
|
+
gemfiles.flat_map do |file|
|
95
|
+
GemspecFinder.new(gemfile: file).gemspec_directories
|
96
|
+
end.uniq
|
97
|
+
|
98
|
+
directories.empty? ? ["."] : directories
|
99
|
+
end
|
100
|
+
|
73
101
|
def ruby_version_file
|
74
102
|
return unless gemfile
|
75
103
|
return unless gemfile.content.include?(".ruby-version")
|
@@ -83,7 +111,7 @@ module Dependabot
|
|
83
111
|
gemspec_files = []
|
84
112
|
unfetchable_gems = []
|
85
113
|
|
86
|
-
|
114
|
+
path_gemspec_paths.each do |path|
|
87
115
|
# Get any gemspecs at the path itself
|
88
116
|
gemspecs_at_path = fetch_gemspecs_from_directory(path)
|
89
117
|
|
@@ -112,8 +140,8 @@ module Dependabot
|
|
112
140
|
gemspec_files.tap { |ar| ar.each { |f| f.support_file = true } }
|
113
141
|
end
|
114
142
|
|
115
|
-
def
|
116
|
-
|
143
|
+
def path_gemspec_paths
|
144
|
+
fetch_path_gemspec_paths.map { |path| Pathname.new(path) }
|
117
145
|
end
|
118
146
|
|
119
147
|
def require_relative_files(files)
|
@@ -136,7 +164,7 @@ module Dependabot
|
|
136
164
|
map { |fp| fetch_file_from_host(fp) }
|
137
165
|
end
|
138
166
|
|
139
|
-
def
|
167
|
+
def fetch_path_gemspec_paths
|
140
168
|
if lockfile
|
141
169
|
parsed_lockfile = ::Bundler::LockfileParser.new(
|
142
170
|
sanitized_lockfile_content
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "parser/current"
|
5
|
+
require "dependabot/file_fetchers/ruby/bundler"
|
6
|
+
require "dependabot/errors"
|
7
|
+
|
8
|
+
module Dependabot
|
9
|
+
module FileFetchers
|
10
|
+
module Ruby
|
11
|
+
class Bundler
|
12
|
+
# Finds the directories of any gemspecs declared using `gemspec` in the
|
13
|
+
# passed Gemfile.
|
14
|
+
class GemspecFinder
|
15
|
+
def initialize(gemfile:)
|
16
|
+
@gemfile = gemfile
|
17
|
+
end
|
18
|
+
|
19
|
+
def gemspec_directories
|
20
|
+
ast = Parser::CurrentRuby.parse(gemfile.content)
|
21
|
+
find_gemspec_paths(ast)
|
22
|
+
rescue Parser::SyntaxError
|
23
|
+
raise Dependabot::DependencyFileNotParseable, gemfile.path
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :gemfile
|
29
|
+
|
30
|
+
# rubocop:disable Security/Eval
|
31
|
+
def find_gemspec_paths(node)
|
32
|
+
return [] unless node.is_a?(Parser::AST::Node)
|
33
|
+
|
34
|
+
if declares_gemspec_dependency?(node)
|
35
|
+
path_node = path_node_for_gem_declaration(node)
|
36
|
+
return [clean_path(".")] unless path_node
|
37
|
+
|
38
|
+
begin
|
39
|
+
# We use eval here, but we know what we're doing. The
|
40
|
+
# FileFetchers helper method should only ever be run in an
|
41
|
+
# isolated environment
|
42
|
+
path = eval(path_node.loc.expression.source)
|
43
|
+
rescue StandardError
|
44
|
+
return []
|
45
|
+
end
|
46
|
+
return [clean_path(path)]
|
47
|
+
end
|
48
|
+
|
49
|
+
node.children.flat_map do |child_node|
|
50
|
+
find_gemspec_paths(child_node)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
# rubocop:enable Security/Eval
|
54
|
+
|
55
|
+
def current_dir
|
56
|
+
@current_dir ||= gemfile.name.rpartition("/").first
|
57
|
+
@current_dir = nil if @current_dir == ""
|
58
|
+
@current_dir
|
59
|
+
end
|
60
|
+
|
61
|
+
def declares_gemspec_dependency?(node)
|
62
|
+
return false unless node.is_a?(Parser::AST::Node)
|
63
|
+
|
64
|
+
node.children[1] == :gemspec
|
65
|
+
end
|
66
|
+
|
67
|
+
def clean_path(path)
|
68
|
+
if Pathname.new(path).absolute?
|
69
|
+
base_path = Pathname.new(File.expand_path(Dir.pwd))
|
70
|
+
path = Pathname.new(path).relative_path_from(base_path).to_s
|
71
|
+
end
|
72
|
+
path = File.join(current_dir, path) unless current_dir.nil?
|
73
|
+
Pathname.new(path).cleanpath
|
74
|
+
end
|
75
|
+
|
76
|
+
def path_node_for_gem_declaration(node)
|
77
|
+
return unless node.children.last.is_a?(Parser::AST::Node)
|
78
|
+
return unless node.children.last.type == :hash
|
79
|
+
|
80
|
+
kwargs_node = node.children.last
|
81
|
+
|
82
|
+
path_hash_pair =
|
83
|
+
kwargs_node.children.
|
84
|
+
find { |hash_pair| key_from_hash_pair(hash_pair) == :path }
|
85
|
+
|
86
|
+
return unless path_hash_pair
|
87
|
+
|
88
|
+
path_hash_pair.children.last
|
89
|
+
end
|
90
|
+
|
91
|
+
def key_from_hash_pair(node)
|
92
|
+
node.children.first.children.first.to_sym
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -137,8 +137,7 @@ module Dependabot
|
|
137
137
|
@parsed_gemspecs ||= {}
|
138
138
|
@parsed_gemspecs[file.name] ||=
|
139
139
|
SharedHelpers.in_a_temporary_directory do
|
140
|
-
|
141
|
-
imported_ruby_files.each do |f|
|
140
|
+
[file, *imported_ruby_files].each do |f|
|
142
141
|
path = f.name
|
143
142
|
FileUtils.mkdir_p(Pathname.new(path).dirname)
|
144
143
|
File.write(path, f.content)
|
@@ -278,10 +277,10 @@ module Dependabot
|
|
278
277
|
end
|
279
278
|
|
280
279
|
def gemspecs
|
281
|
-
#
|
282
|
-
@gemspecs ||= prepared_dependency_files.
|
283
|
-
|
284
|
-
|
280
|
+
# Path gemspecs are excluded (they're supporting files)
|
281
|
+
@gemspecs ||= prepared_dependency_files.
|
282
|
+
select { |file| file.name.end_with?(".gemspec") }.
|
283
|
+
reject(&:support_file?)
|
285
284
|
end
|
286
285
|
|
287
286
|
def imported_ruby_files
|
@@ -16,7 +16,7 @@ module Dependabot
|
|
16
16
|
/^Gemfile\.lock$/,
|
17
17
|
/^gems\.rb$/,
|
18
18
|
/^gems\.locked$/,
|
19
|
-
|
19
|
+
/^*\.gemspec$/
|
20
20
|
]
|
21
21
|
end
|
22
22
|
|
@@ -113,7 +113,9 @@ module Dependabot
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def top_level_gemspecs
|
116
|
-
dependency_files.
|
116
|
+
dependency_files.
|
117
|
+
select { |file| file.name.end_with?(".gemspec") }.
|
118
|
+
reject(&:support_file?)
|
117
119
|
end
|
118
120
|
end
|
119
121
|
end
|
@@ -94,10 +94,10 @@ module Dependabot
|
|
94
94
|
File.write(lockfile.name, sanitized_lockfile_body)
|
95
95
|
|
96
96
|
top_level_gemspecs.each do |gemspec|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
)
|
97
|
+
path = gemspec.name
|
98
|
+
FileUtils.mkdir_p(Pathname.new(path).dirname)
|
99
|
+
updated_content = updated_gemspec_content(gemspec)
|
100
|
+
File.write(path, sanitized_gemspec_content(updated_content))
|
101
101
|
end
|
102
102
|
|
103
103
|
write_ruby_version_file
|
@@ -248,7 +248,9 @@ module Dependabot
|
|
248
248
|
end
|
249
249
|
|
250
250
|
def top_level_gemspecs
|
251
|
-
dependency_files.
|
251
|
+
dependency_files.
|
252
|
+
select { |file| file.name.end_with?(".gemspec") }.
|
253
|
+
reject(&:support_file?)
|
252
254
|
end
|
253
255
|
|
254
256
|
def ruby_version_file
|
@@ -136,9 +136,7 @@ module Dependabot
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def library?
|
139
|
-
if files.
|
140
|
-
return true
|
141
|
-
end
|
139
|
+
return true if files.any? { |file| file.name.end_with?(".gemspec") }
|
142
140
|
|
143
141
|
dependencies.none?(&:appears_in_lockfile?)
|
144
142
|
end
|
@@ -708,8 +708,7 @@ module Dependabot
|
|
708
708
|
end
|
709
709
|
|
710
710
|
def library?
|
711
|
-
|
712
|
-
return true if filenames.any? { |nm| nm.match?(%r{^[^/]*\.gemspec$}) }
|
711
|
+
return true if files.map(&:name).any? { |nm| nm.end_with?(".gemspec") }
|
713
712
|
|
714
713
|
dependencies.none?(&:appears_in_lockfile?)
|
715
714
|
end
|
@@ -76,7 +76,8 @@ module Dependabot
|
|
76
76
|
files << DependencyFile.new(
|
77
77
|
name: file.name,
|
78
78
|
content: sanitize_gemspec_content(file.content),
|
79
|
-
directory: file.directory
|
79
|
+
directory: file.directory,
|
80
|
+
support_file: file.support_file?
|
80
81
|
)
|
81
82
|
end
|
82
83
|
|
@@ -132,7 +133,9 @@ module Dependabot
|
|
132
133
|
end
|
133
134
|
|
134
135
|
def top_level_gemspecs
|
135
|
-
dependency_files.
|
136
|
+
dependency_files.
|
137
|
+
select { |f| f.name.end_with?(".gemspec") }.
|
138
|
+
reject(&:support_file?)
|
136
139
|
end
|
137
140
|
|
138
141
|
def ruby_version_file
|
data/lib/dependabot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.89.
|
4
|
+
version: 0.89.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-ecr
|
@@ -359,6 +359,7 @@ files:
|
|
359
359
|
- lib/dependabot/file_fetchers/java_script/npm_and_yarn/path_dependency_builder.rb
|
360
360
|
- lib/dependabot/file_fetchers/ruby/bundler.rb
|
361
361
|
- lib/dependabot/file_fetchers/ruby/bundler/child_gemfile_finder.rb
|
362
|
+
- lib/dependabot/file_fetchers/ruby/bundler/gemspec_finder.rb
|
362
363
|
- lib/dependabot/file_fetchers/ruby/bundler/path_gemspec_finder.rb
|
363
364
|
- lib/dependabot/file_fetchers/ruby/bundler/require_relative_finder.rb
|
364
365
|
- lib/dependabot/file_parsers.rb
|