dependabot-git_submodules 0.80.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 +7 -0
- data/lib/dependabot/git_submodules.rb +9 -0
- data/lib/dependabot/git_submodules/file_fetcher.rb +75 -0
- data/lib/dependabot/git_submodules/file_parser.rb +71 -0
- data/lib/dependabot/git_submodules/file_updater.rb +40 -0
- data/lib/dependabot/git_submodules/metadata_finder.rb +22 -0
- data/lib/dependabot/git_submodules/update_checker.rb +54 -0
- metadata +176 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: b84cb38ad137a64b1b7347819184e41e9f7797916d762d071ddd863d93994a88
|
|
4
|
+
data.tar.gz: 33f728ab2f939903cf7b15f5f57659e3df9543620426be3c7140cecbc529475a
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 5315717bedca2a08dd2fdc90ccb177641f0d699236c7f4280d63e70dcd8c41c263ccc184003b2f93d82b7015140b117edda9acbef442f4efa0a20a0400c5a002
|
|
7
|
+
data.tar.gz: 73dad2b0b1fdd675b36b7669fa55b62768ea05935730ce616c5d57f3d7b877b199c5afaede151361efa762490a444ea91088a3f466502aa11d7c88567b86b03e
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# These all need to be required so the various classes can be registered in a
|
|
4
|
+
# lookup table of package manager names to concrete classes.
|
|
5
|
+
require "dependabot/git_submodules/file_fetcher"
|
|
6
|
+
require "dependabot/git_submodules/file_parser"
|
|
7
|
+
require "dependabot/git_submodules/update_checker"
|
|
8
|
+
require "dependabot/git_submodules/file_updater"
|
|
9
|
+
require "dependabot/git_submodules/metadata_finder"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parseconfig"
|
|
4
|
+
require "dependabot/file_fetchers"
|
|
5
|
+
require "dependabot/file_fetchers/base"
|
|
6
|
+
require "dependabot/shared_helpers"
|
|
7
|
+
|
|
8
|
+
module Dependabot
|
|
9
|
+
module GitSubmodules
|
|
10
|
+
class FileFetcher < Dependabot::FileFetchers::Base
|
|
11
|
+
def self.required_files_in?(filenames)
|
|
12
|
+
filenames.include?(".gitmodules")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.required_files_message
|
|
16
|
+
"Repo must contain a .gitmodules file."
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def fetch_files
|
|
22
|
+
fetched_files = []
|
|
23
|
+
fetched_files << gitmodules_file
|
|
24
|
+
fetched_files += submodule_refs
|
|
25
|
+
fetched_files
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def gitmodules_file
|
|
29
|
+
@gitmodules_file ||= fetch_file_from_host(".gitmodules")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def submodule_refs
|
|
33
|
+
submodule_paths.
|
|
34
|
+
map { |path| fetch_submodule_ref_from_host(path) }.
|
|
35
|
+
tap { |refs| refs.each { |f| f.support_file = true } }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def submodule_paths
|
|
39
|
+
Dependabot::SharedHelpers.in_a_temporary_directory do
|
|
40
|
+
File.write(".gitmodules", gitmodules_file.content)
|
|
41
|
+
ParseConfig.new(".gitmodules").params.values.map { |p| p["path"] }
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def fetch_submodule_ref_from_host(submodule_path)
|
|
46
|
+
path = Pathname.new(File.join(directory, submodule_path)).
|
|
47
|
+
cleanpath.to_path.gsub(%r{^/*}, "")
|
|
48
|
+
sha = case source.provider
|
|
49
|
+
when "github"
|
|
50
|
+
github_client_for_source.contents(
|
|
51
|
+
repo,
|
|
52
|
+
path: path,
|
|
53
|
+
ref: commit
|
|
54
|
+
).sha
|
|
55
|
+
when "gitlab"
|
|
56
|
+
tmp_path = path.gsub(%r{^/*}, "")
|
|
57
|
+
gitlab_client.get_file(repo, tmp_path, commit).blob_id
|
|
58
|
+
else raise "Unsupported provider '#{source.provider}'."
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
DependencyFile.new(
|
|
62
|
+
name: Pathname.new(submodule_path).cleanpath.to_path,
|
|
63
|
+
content: sha,
|
|
64
|
+
directory: directory,
|
|
65
|
+
type: "submodule"
|
|
66
|
+
)
|
|
67
|
+
rescue Octokit::NotFound, Gitlab::Error::NotFound
|
|
68
|
+
raise Dependabot::DependencyFileNotFound, path
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
Dependabot::FileFetchers.
|
|
75
|
+
register("submodules", Dependabot::GitSubmodules::FileFetcher)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parseconfig"
|
|
4
|
+
require "dependabot/dependency"
|
|
5
|
+
require "dependabot/file_parsers"
|
|
6
|
+
require "dependabot/file_parsers/base"
|
|
7
|
+
require "dependabot/shared_helpers"
|
|
8
|
+
|
|
9
|
+
module Dependabot
|
|
10
|
+
module GitSubmodules
|
|
11
|
+
class FileParser < Dependabot::FileParsers::Base
|
|
12
|
+
def parse
|
|
13
|
+
Dependabot::SharedHelpers.in_a_temporary_directory do
|
|
14
|
+
File.write(".gitmodules", gitmodules_file.content)
|
|
15
|
+
|
|
16
|
+
ParseConfig.new(".gitmodules").params.map do |_, params|
|
|
17
|
+
branch = params["branch"]
|
|
18
|
+
|
|
19
|
+
Dependency.new(
|
|
20
|
+
name: params["path"],
|
|
21
|
+
version: submodule_sha(params["path"]),
|
|
22
|
+
package_manager: "submodules",
|
|
23
|
+
requirements: [{
|
|
24
|
+
requirement: nil,
|
|
25
|
+
file: ".gitmodules",
|
|
26
|
+
source: {
|
|
27
|
+
type: "git",
|
|
28
|
+
url: absolute_url(params["url"]),
|
|
29
|
+
branch: branch,
|
|
30
|
+
ref: branch
|
|
31
|
+
},
|
|
32
|
+
groups: []
|
|
33
|
+
}]
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def absolute_url(url)
|
|
42
|
+
# Submodules can be specified with a relative URL (e.g., ../repo.git)
|
|
43
|
+
# which we want to expand out into a full URL if present.
|
|
44
|
+
return url unless url.start_with?("../", "./")
|
|
45
|
+
|
|
46
|
+
path = Pathname.new(File.join(source.repo, url))
|
|
47
|
+
"https://#{source.hostname}/#{path.cleanpath}"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def submodule_sha(path)
|
|
51
|
+
submodule = dependency_files.find { |f| f.name == path }
|
|
52
|
+
raise "Submodule not found #{path}" unless submodule
|
|
53
|
+
|
|
54
|
+
submodule.content
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def gitmodules_file
|
|
58
|
+
@gitmodules_file ||= get_original_file(".gitmodules")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def check_required_files
|
|
62
|
+
%w(.gitmodules).each do |filename|
|
|
63
|
+
raise "No #{filename}!" unless get_original_file(filename)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
Dependabot::FileParsers.
|
|
71
|
+
register("submodules", Dependabot::GitSubmodules::FileParser)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/file_updaters"
|
|
4
|
+
require "dependabot/file_updaters/base"
|
|
5
|
+
|
|
6
|
+
module Dependabot
|
|
7
|
+
module GitSubmodules
|
|
8
|
+
class FileUpdater < Dependabot::FileUpdaters::Base
|
|
9
|
+
def self.updated_files_regex
|
|
10
|
+
[]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def updated_dependency_files
|
|
14
|
+
[updated_file(file: submodule, content: dependency.version)]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def dependency
|
|
20
|
+
# Git submodules will only ever be updating a single dependency
|
|
21
|
+
dependencies.first
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def check_required_files
|
|
25
|
+
%w(.gitmodules).each do |filename|
|
|
26
|
+
raise "No #{filename}!" unless get_original_file(filename)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def submodule
|
|
31
|
+
@submodule ||= dependency_files.find do |file|
|
|
32
|
+
file.name == dependency.name
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Dependabot::FileUpdaters.
|
|
40
|
+
register("submodules", Dependabot::GitSubmodules::FileUpdater)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/metadata_finders"
|
|
4
|
+
require "dependabot/metadata_finders/base"
|
|
5
|
+
|
|
6
|
+
module Dependabot
|
|
7
|
+
module GitSubmodules
|
|
8
|
+
class MetadataFinder < Dependabot::MetadataFinders::Base
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def look_up_source
|
|
12
|
+
url = dependency.requirements.first.fetch(:source)[:url] ||
|
|
13
|
+
dependency.requirements.first.fetch(:source).fetch("url")
|
|
14
|
+
|
|
15
|
+
Source.from_url(url)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Dependabot::MetadataFinders.
|
|
22
|
+
register("submodules", Dependabot::GitSubmodules::MetadataFinder)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/update_checkers"
|
|
4
|
+
require "dependabot/update_checkers/base"
|
|
5
|
+
require "dependabot/git_commit_checker"
|
|
6
|
+
|
|
7
|
+
module Dependabot
|
|
8
|
+
module GitSubmodules
|
|
9
|
+
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
|
10
|
+
def latest_version
|
|
11
|
+
@latest_version ||= fetch_latest_version
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def latest_resolvable_version
|
|
15
|
+
# Resolvability isn't an issue for submodules.
|
|
16
|
+
latest_version
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def latest_resolvable_version_with_no_unlock
|
|
20
|
+
# No concept of "unlocking" for submodules
|
|
21
|
+
latest_version
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def updated_requirements
|
|
25
|
+
# Submodule requirements are the URL and branch to use for the
|
|
26
|
+
# submodule. We never want to update either.
|
|
27
|
+
dependency.requirements
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def latest_version_resolvable_with_full_unlock?
|
|
33
|
+
# Full unlock checks aren't relevant for submodules
|
|
34
|
+
false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def updated_dependencies_after_full_unlock
|
|
38
|
+
raise NotImplementedError
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def fetch_latest_version
|
|
42
|
+
git_commit_checker = Dependabot::GitCommitChecker.new(
|
|
43
|
+
dependency: dependency,
|
|
44
|
+
credentials: credentials
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
git_commit_checker.head_commit_for_current_branch
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Dependabot::UpdateCheckers.
|
|
54
|
+
register("submodules", Dependabot::GitSubmodules::UpdateChecker)
|
metadata
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: dependabot-git_submodules
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.80.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Dependabot
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2018-12-10 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: dependabot-core
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.80.0
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.80.0
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: byebug
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '12'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '12'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.8'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.8'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rspec-its
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '1.2'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '1.2'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rspec_junit_formatter
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0.4'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0.4'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rubocop
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0.61'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0.61'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: vcr
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '4.0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '4.0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: webmock
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '3.4'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '3.4'
|
|
139
|
+
description: Automated dependency management for Ruby, JavaScript, Python, PHP, Elixir,
|
|
140
|
+
Rust, Java, .NET, Elm and Go
|
|
141
|
+
email: support@dependabot.com
|
|
142
|
+
executables: []
|
|
143
|
+
extensions: []
|
|
144
|
+
extra_rdoc_files: []
|
|
145
|
+
files:
|
|
146
|
+
- lib/dependabot/git_submodules.rb
|
|
147
|
+
- lib/dependabot/git_submodules/file_fetcher.rb
|
|
148
|
+
- lib/dependabot/git_submodules/file_parser.rb
|
|
149
|
+
- lib/dependabot/git_submodules/file_updater.rb
|
|
150
|
+
- lib/dependabot/git_submodules/metadata_finder.rb
|
|
151
|
+
- lib/dependabot/git_submodules/update_checker.rb
|
|
152
|
+
homepage: https://github.com/dependabot/dependabot-core
|
|
153
|
+
licenses:
|
|
154
|
+
- Nonstandard
|
|
155
|
+
metadata: {}
|
|
156
|
+
post_install_message:
|
|
157
|
+
rdoc_options: []
|
|
158
|
+
require_paths:
|
|
159
|
+
- lib
|
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
|
+
requirements:
|
|
162
|
+
- - ">="
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: 2.5.0
|
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
|
+
requirements:
|
|
167
|
+
- - ">="
|
|
168
|
+
- !ruby/object:Gem::Version
|
|
169
|
+
version: 2.5.0
|
|
170
|
+
requirements: []
|
|
171
|
+
rubyforge_project:
|
|
172
|
+
rubygems_version: 2.7.7
|
|
173
|
+
signing_key:
|
|
174
|
+
specification_version: 4
|
|
175
|
+
summary: Git Submodules support for dependabot-core
|
|
176
|
+
test_files: []
|