dependabot-cargo 0.311.0 → 0.312.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 +4 -4
- data/lib/dependabot/cargo/file_fetcher.rb +56 -17
- data/lib/dependabot/cargo/file_updater.rb +23 -8
- data/lib/dependabot/cargo/registry_fetcher.rb +16 -5
- data/lib/dependabot/cargo/requirement.rb +10 -4
- metadata +23 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc6005c288fca9a7265b60df2f5378c8da5112dbf921c546f28703545fa4a3a3
|
4
|
+
data.tar.gz: d8a0a9b18a4d817e51436b45078187fd1f2e19fa7ccad03af86d45d5484cc35e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17e7aa764c53d1af95f4657b1b39a1dbf69a27926bfc0bab2cd8918dc372be6edbd56dd10caad3801503763ffbb41c9ab72a0642e88f509bc2b6711ed0ec72b6
|
7
|
+
data.tar.gz: 788d13ab539e7d1baca4c2b6f0f3a10b6d6756cffa9079d04f5539ab10786b9e3667b31b565c7ddddc15023408681c1b39cc03f664e9a884f625b01d7491254f
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require "pathname"
|
@@ -17,17 +17,20 @@ module Dependabot
|
|
17
17
|
extend T::Sig
|
18
18
|
extend T::Helpers
|
19
19
|
|
20
|
+
sig { override.params(filenames: T::Array[String]).returns(T::Boolean) }
|
20
21
|
def self.required_files_in?(filenames)
|
21
22
|
filenames.include?("Cargo.toml")
|
22
23
|
end
|
23
24
|
|
25
|
+
sig { override.returns(String) }
|
24
26
|
def self.required_files_message
|
25
27
|
"Repo must contain a Cargo.toml."
|
26
28
|
end
|
27
29
|
|
30
|
+
sig { override.returns(T.nilable(T::Hash[Symbol, T.untyped])) }
|
28
31
|
def ecosystem_versions
|
29
32
|
channel = if rust_toolchain
|
30
|
-
TomlRB.parse(rust_toolchain.content).fetch("toolchain", nil)&.fetch("channel", nil)
|
33
|
+
TomlRB.parse(T.must(rust_toolchain).content).fetch("toolchain", nil)&.fetch("channel", nil)
|
31
34
|
else
|
32
35
|
"default"
|
33
36
|
end
|
@@ -39,7 +42,7 @@ module Dependabot
|
|
39
42
|
}
|
40
43
|
rescue TomlRB::ParseError
|
41
44
|
raise Dependabot::DependencyFileNotParseable.new(
|
42
|
-
rust_toolchain.path,
|
45
|
+
T.must(rust_toolchain).path,
|
43
46
|
"only rust-toolchain files formatted as TOML are supported, the non-TOML format was deprecated by Rust"
|
44
47
|
)
|
45
48
|
end
|
@@ -48,15 +51,18 @@ module Dependabot
|
|
48
51
|
def fetch_files
|
49
52
|
fetched_files = T.let([], T::Array[DependencyFile])
|
50
53
|
fetched_files << cargo_toml
|
51
|
-
fetched_files << cargo_lock if cargo_lock
|
52
|
-
fetched_files << cargo_config if cargo_config
|
53
|
-
fetched_files << rust_toolchain if rust_toolchain
|
54
|
+
fetched_files << T.must(cargo_lock) if cargo_lock
|
55
|
+
fetched_files << T.must(cargo_config) if cargo_config
|
56
|
+
fetched_files << T.must(rust_toolchain) if rust_toolchain
|
54
57
|
fetched_files += fetch_path_dependency_and_workspace_files
|
55
58
|
fetched_files.uniq
|
56
59
|
end
|
57
60
|
|
58
61
|
private
|
59
62
|
|
63
|
+
sig do
|
64
|
+
params(files: T.nilable(T::Array[Dependabot::DependencyFile])).returns(T::Array[Dependabot::DependencyFile])
|
65
|
+
end
|
60
66
|
def fetch_path_dependency_and_workspace_files(files = nil)
|
61
67
|
fetched_files = files || [cargo_toml]
|
62
68
|
|
@@ -73,8 +79,9 @@ module Dependabot
|
|
73
79
|
fetch_path_dependency_and_workspace_files(updated_files)
|
74
80
|
end
|
75
81
|
|
82
|
+
sig { params(cargo_toml: Dependabot::DependencyFile).returns(T::Array[Dependabot::DependencyFile]) }
|
76
83
|
def workspace_files(cargo_toml)
|
77
|
-
@workspace_files ||= {}
|
84
|
+
@workspace_files ||= T.let({}, T.nilable(T::Hash[String, T::Array[Dependabot::DependencyFile]]))
|
78
85
|
@workspace_files[cargo_toml.name] ||=
|
79
86
|
fetch_workspace_files(
|
80
87
|
file: cargo_toml,
|
@@ -82,8 +89,9 @@ module Dependabot
|
|
82
89
|
)
|
83
90
|
end
|
84
91
|
|
92
|
+
sig { params(fetched_files: T::Array[Dependabot::DependencyFile]).returns(T::Array[Dependabot::DependencyFile]) }
|
85
93
|
def path_dependency_files(fetched_files)
|
86
|
-
@path_dependency_files ||= {}
|
94
|
+
@path_dependency_files ||= T.let({}, T.nilable(T::Hash[String, T::Array[Dependabot::DependencyFile]]))
|
87
95
|
fetched_path_dependency_files = T.let([], T::Array[Dependabot::DependencyFile])
|
88
96
|
fetched_files.each do |file|
|
89
97
|
@path_dependency_files[file.name] ||=
|
@@ -93,12 +101,19 @@ module Dependabot
|
|
93
101
|
fetched_path_dependency_files
|
94
102
|
)
|
95
103
|
|
96
|
-
fetched_path_dependency_files += @path_dependency_files[file.name]
|
104
|
+
fetched_path_dependency_files += T.must(@path_dependency_files[file.name])
|
97
105
|
end
|
98
106
|
|
99
107
|
fetched_path_dependency_files
|
100
108
|
end
|
101
109
|
|
110
|
+
sig do
|
111
|
+
params(
|
112
|
+
file: Dependabot::DependencyFile,
|
113
|
+
previously_fetched_files: T::Array[Dependabot::DependencyFile]
|
114
|
+
)
|
115
|
+
.returns(T::Array[Dependabot::DependencyFile])
|
116
|
+
end
|
102
117
|
def fetch_workspace_files(file:, previously_fetched_files:)
|
103
118
|
current_dir = file.name.rpartition("/").first
|
104
119
|
current_dir = nil if current_dir == ""
|
@@ -125,6 +140,13 @@ module Dependabot
|
|
125
140
|
end
|
126
141
|
|
127
142
|
# rubocop:disable Metrics/PerceivedComplexity
|
143
|
+
sig do
|
144
|
+
params(
|
145
|
+
file: Dependabot::DependencyFile,
|
146
|
+
previously_fetched_files: T::Array[Dependabot::DependencyFile]
|
147
|
+
)
|
148
|
+
.returns(T::Array[Dependabot::DependencyFile])
|
149
|
+
end
|
128
150
|
def fetch_path_dependency_files(file:, previously_fetched_files:)
|
129
151
|
current_dir = file.name.rpartition("/").first
|
130
152
|
current_dir = nil if current_dir == ""
|
@@ -165,6 +187,7 @@ module Dependabot
|
|
165
187
|
unfetchable_required_path_deps
|
166
188
|
end
|
167
189
|
|
190
|
+
sig { params(dependencies: T::Hash[T.untyped, T.untyped]).returns(T::Array[String]) }
|
168
191
|
def collect_path_dependencies_paths(dependencies)
|
169
192
|
paths = []
|
170
193
|
dependencies.each do |_, details|
|
@@ -176,6 +199,7 @@ module Dependabot
|
|
176
199
|
end
|
177
200
|
|
178
201
|
# rubocop:enable Metrics/PerceivedComplexity
|
202
|
+
sig { params(file: Dependabot::DependencyFile).returns(T::Array[String]) }
|
179
203
|
def path_dependency_paths_from_file(file)
|
180
204
|
paths = T.let([], T::Array[String])
|
181
205
|
|
@@ -198,6 +222,7 @@ module Dependabot
|
|
198
222
|
paths
|
199
223
|
end
|
200
224
|
|
225
|
+
sig { params(file: Dependabot::DependencyFile).returns(T::Array[String]) }
|
201
226
|
def replacement_path_dependency_paths_from_file(file)
|
202
227
|
paths = []
|
203
228
|
|
@@ -226,6 +251,7 @@ module Dependabot
|
|
226
251
|
|
227
252
|
# See if this Cargo manifest inherits any property from a workspace
|
228
253
|
# (e.g. edition = { workspace = true }).
|
254
|
+
sig { params(hash: T::Hash[T.untyped, T.untyped]).returns(T::Boolean) }
|
229
255
|
def workspace_member?(hash)
|
230
256
|
hash.each do |key, value|
|
231
257
|
if key == "workspace" && value == true
|
@@ -277,6 +303,7 @@ module Dependabot
|
|
277
303
|
nil
|
278
304
|
end
|
279
305
|
|
306
|
+
sig { params(file: Dependabot::DependencyFile).returns(T::Array[String]) }
|
280
307
|
def workspace_dependency_paths_from_file(file)
|
281
308
|
if parsed_file(file)["workspace"] &&
|
282
309
|
!parsed_file(file)["workspace"].key?("members")
|
@@ -306,6 +333,7 @@ module Dependabot
|
|
306
333
|
# rubocop:disable Metrics/CyclomaticComplexity
|
307
334
|
# rubocop:disable Metrics/PerceivedComplexity
|
308
335
|
# rubocop:disable Metrics/AbcSize
|
336
|
+
sig { params(file: Dependabot::DependencyFile, path: String).returns(T::Boolean) }
|
309
337
|
def required_path?(file, path)
|
310
338
|
# Paths specified in dependency declaration
|
311
339
|
Cargo::FileParser::DEPENDENCY_TYPES.each do |type|
|
@@ -356,6 +384,7 @@ module Dependabot
|
|
356
384
|
# rubocop:enable Metrics/PerceivedComplexity
|
357
385
|
# rubocop:enable Metrics/CyclomaticComplexity
|
358
386
|
|
387
|
+
sig { params(path: String).returns(T::Array[String]) }
|
359
388
|
def expand_workspaces(path)
|
360
389
|
path = Pathname.new(path).cleanpath.to_path
|
361
390
|
dir = directory.gsub(%r{(^/|/$)}, "")
|
@@ -367,31 +396,39 @@ module Dependabot
|
|
367
396
|
.select { |filename| File.fnmatch?(path, filename) }
|
368
397
|
end
|
369
398
|
|
399
|
+
sig { params(file: Dependabot::DependencyFile).returns(T::Hash[T.untyped, T.untyped]) }
|
370
400
|
def parsed_file(file)
|
371
401
|
TomlRB.parse(file.content)
|
372
402
|
rescue TomlRB::ParseError, TomlRB::ValueOverwriteError
|
373
403
|
raise Dependabot::DependencyFileNotParseable, file.path
|
374
404
|
end
|
375
405
|
|
406
|
+
sig { returns(Dependabot::DependencyFile) }
|
376
407
|
def cargo_toml
|
377
|
-
@cargo_toml ||= fetch_file_from_host("Cargo.toml")
|
408
|
+
@cargo_toml ||= T.let(fetch_file_from_host("Cargo.toml"), T.nilable(Dependabot::DependencyFile))
|
378
409
|
end
|
379
410
|
|
411
|
+
sig { returns(T.nilable(Dependabot::DependencyFile)) }
|
380
412
|
def cargo_lock
|
381
|
-
|
382
|
-
|
383
|
-
|
413
|
+
@cargo_lock ||= T.let(
|
414
|
+
fetch_file_if_present("Cargo.lock"),
|
415
|
+
T.nilable(Dependabot::DependencyFile)
|
416
|
+
)
|
384
417
|
end
|
385
418
|
|
419
|
+
sig { returns(T.nilable(Dependabot::DependencyFile)) }
|
386
420
|
def cargo_config
|
387
421
|
return @cargo_config if defined?(@cargo_config)
|
388
422
|
|
389
423
|
@cargo_config = fetch_support_file(".cargo/config.toml")
|
390
424
|
|
391
|
-
@cargo_config ||=
|
392
|
-
|
425
|
+
@cargo_config ||= T.let(
|
426
|
+
fetch_support_file(".cargo/config")&.tap { |f| f.name = ".cargo/config.toml" },
|
427
|
+
T.nilable(Dependabot::DependencyFile)
|
428
|
+
)
|
393
429
|
end
|
394
430
|
|
431
|
+
sig { returns(T.nilable(Dependabot::DependencyFile)) }
|
395
432
|
def rust_toolchain
|
396
433
|
return @rust_toolchain if defined?(@rust_toolchain)
|
397
434
|
|
@@ -400,8 +437,10 @@ module Dependabot
|
|
400
437
|
# Per https://rust-lang.github.io/rustup/overrides.html the file can
|
401
438
|
# have a `.toml` extension, but the non-extension version is preferred.
|
402
439
|
# Renaming here to simplify finding it later in the code.
|
403
|
-
@rust_toolchain ||=
|
404
|
-
|
440
|
+
@rust_toolchain ||= T.let(
|
441
|
+
fetch_support_file("rust-toolchain.toml")&.tap { |f| f.name = "rust-toolchain" },
|
442
|
+
T.nilable(Dependabot::DependencyFile)
|
443
|
+
)
|
405
444
|
end
|
406
445
|
end
|
407
446
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require "sorbet-runtime"
|
4
5
|
require "toml-rb"
|
6
|
+
|
5
7
|
require "dependabot/git_commit_checker"
|
6
8
|
require "dependabot/file_updaters"
|
7
9
|
require "dependabot/file_updaters/base"
|
@@ -10,9 +12,12 @@ require "dependabot/shared_helpers"
|
|
10
12
|
module Dependabot
|
11
13
|
module Cargo
|
12
14
|
class FileUpdater < Dependabot::FileUpdaters::Base
|
15
|
+
extend T::Sig
|
16
|
+
|
13
17
|
require_relative "file_updater/manifest_updater"
|
14
18
|
require_relative "file_updater/lockfile_updater"
|
15
19
|
|
20
|
+
sig { override.returns(T::Array[Regexp]) }
|
16
21
|
def self.updated_files_regex
|
17
22
|
[
|
18
23
|
/Cargo\.toml$/, # Matches Cargo.toml in the root directory or any subdirectory
|
@@ -20,6 +25,7 @@ module Dependabot
|
|
20
25
|
]
|
21
26
|
end
|
22
27
|
|
28
|
+
sig { override.returns(T::Array[Dependabot::DependencyFile]) }
|
23
29
|
def updated_dependency_files
|
24
30
|
# Returns an array of updated files. Only files that have been updated
|
25
31
|
# should be returned.
|
@@ -35,9 +41,9 @@ module Dependabot
|
|
35
41
|
)
|
36
42
|
end
|
37
43
|
|
38
|
-
if lockfile && updated_lockfile_content != lockfile.content
|
44
|
+
if lockfile && updated_lockfile_content != T.must(lockfile).content
|
39
45
|
updated_files <<
|
40
|
-
updated_file(file: lockfile, content: updated_lockfile_content)
|
46
|
+
updated_file(file: T.must(lockfile), content: updated_lockfile_content)
|
41
47
|
end
|
42
48
|
|
43
49
|
raise "No files changed!" if updated_files.empty?
|
@@ -47,10 +53,12 @@ module Dependabot
|
|
47
53
|
|
48
54
|
private
|
49
55
|
|
56
|
+
sig { override.void }
|
50
57
|
def check_required_files
|
51
58
|
raise "No Cargo.toml!" unless get_original_file("Cargo.toml")
|
52
59
|
end
|
53
60
|
|
61
|
+
sig { params(file: Dependabot::DependencyFile).returns(String) }
|
54
62
|
def updated_manifest_content(file)
|
55
63
|
ManifestUpdater.new(
|
56
64
|
dependencies: dependencies,
|
@@ -58,24 +66,31 @@ module Dependabot
|
|
58
66
|
).updated_manifest_content
|
59
67
|
end
|
60
68
|
|
69
|
+
sig { returns(String) }
|
61
70
|
def updated_lockfile_content
|
62
|
-
@updated_lockfile_content ||=
|
71
|
+
@updated_lockfile_content ||= T.let(
|
63
72
|
LockfileUpdater.new(
|
64
73
|
dependencies: dependencies,
|
65
74
|
dependency_files: dependency_files,
|
66
75
|
credentials: credentials
|
67
|
-
).updated_lockfile_content
|
76
|
+
).updated_lockfile_content,
|
77
|
+
T.nilable(String)
|
78
|
+
)
|
68
79
|
end
|
69
80
|
|
81
|
+
sig { returns(T::Array[Dependabot::DependencyFile]) }
|
70
82
|
def manifest_files
|
71
|
-
@manifest_files ||=
|
83
|
+
@manifest_files ||= T.let(
|
72
84
|
dependency_files
|
73
85
|
.select { |f| f.name.end_with?("Cargo.toml") }
|
74
|
-
.reject(&:support_file?)
|
86
|
+
.reject(&:support_file?),
|
87
|
+
T.nilable(T::Array[Dependabot::DependencyFile])
|
88
|
+
)
|
75
89
|
end
|
76
90
|
|
91
|
+
sig { returns(T.nilable(Dependabot::DependencyFile)) }
|
77
92
|
def lockfile
|
78
|
-
@lockfile ||= get_original_file("Cargo.lock")
|
93
|
+
@lockfile ||= T.let(get_original_file("Cargo.lock"), T.nilable(Dependabot::DependencyFile))
|
79
94
|
end
|
80
95
|
end
|
81
96
|
end
|
@@ -1,41 +1,52 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
4
6
|
require "dependabot/file_fetchers"
|
5
7
|
require "dependabot/file_fetchers/base"
|
6
8
|
|
7
9
|
module Dependabot
|
8
10
|
module Cargo
|
9
11
|
class RegistryFetcher < Dependabot::FileFetchers::Base
|
12
|
+
extend T::Sig
|
13
|
+
|
14
|
+
sig { override.params(filenames: T::Array[String]).returns(T::Boolean) }
|
10
15
|
def self.required_files_in?(filenames)
|
11
16
|
filenames.include?("config.json")
|
12
17
|
end
|
13
18
|
|
19
|
+
sig { override.returns(String) }
|
14
20
|
def self.required_files_message
|
15
21
|
"Repo must contain a config.json"
|
16
22
|
end
|
17
23
|
|
24
|
+
sig { returns(String) }
|
18
25
|
def dl
|
19
|
-
parsed_config_json["dl"].chomp("/")
|
26
|
+
T.must(parsed_config_json["dl"]).chomp("/")
|
20
27
|
end
|
21
28
|
|
29
|
+
sig { returns(String) }
|
22
30
|
def api
|
23
|
-
parsed_config_json["api"].chomp("/")
|
31
|
+
T.must(parsed_config_json["api"]).chomp("/")
|
24
32
|
end
|
25
33
|
|
26
34
|
private
|
27
35
|
|
36
|
+
sig { override.returns(T::Array[Dependabot::DependencyFile]) }
|
28
37
|
def fetch_files
|
29
38
|
fetched_files = []
|
30
39
|
fetched_files << config_json
|
31
40
|
end
|
32
41
|
|
42
|
+
sig { returns(T::Hash[String, String]) }
|
33
43
|
def parsed_config_json
|
34
|
-
@parsed_config_json ||= JSON.parse(config_json.content)
|
44
|
+
@parsed_config_json ||= T.let(JSON.parse(T.must(config_json.content)), T.nilable(T::Hash[String, String]))
|
35
45
|
end
|
36
46
|
|
47
|
+
sig { returns(Dependabot::DependencyFile) }
|
37
48
|
def config_json
|
38
|
-
@config_json ||= fetch_file_from_host("config.json")
|
49
|
+
@config_json ||= T.let(fetch_file_from_host("config.json"), T.nilable(Dependabot::DependencyFile))
|
39
50
|
end
|
40
51
|
end
|
41
52
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
################################################################################
|
@@ -21,11 +21,12 @@ module Dependabot
|
|
21
21
|
quoted = OPS.keys.map { |k| Regexp.quote(k) }.join("|")
|
22
22
|
version_pattern = Cargo::Version::VERSION_PATTERN
|
23
23
|
|
24
|
-
PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{version_pattern})\\s*".freeze
|
24
|
+
PATTERN_RAW = T.let("\\s*(#{quoted})?\\s*(#{version_pattern})\\s*".freeze, String)
|
25
25
|
PATTERN = /\A#{PATTERN_RAW}\z/
|
26
26
|
|
27
27
|
# Use Cargo::Version rather than Gem::Version to ensure that
|
28
28
|
# pre-release versions aren't transformed.
|
29
|
+
sig { override.params(obj: T.any(Gem::Version, String)).returns([String, Gem::Version]) }
|
29
30
|
def self.parse(obj)
|
30
31
|
return ["=", Cargo::Version.new(obj.to_s)] if obj.is_a?(Gem::Version)
|
31
32
|
|
@@ -47,9 +48,10 @@ module Dependabot
|
|
47
48
|
[new(requirement_string)]
|
48
49
|
end
|
49
50
|
|
51
|
+
sig { params(requirements: T.nilable(T.any(String, T::Array[String]))).void }
|
50
52
|
def initialize(*requirements)
|
51
53
|
requirements = requirements.flatten.flat_map do |req_string|
|
52
|
-
req_string.split(",").map(&:strip).map do |r|
|
54
|
+
T.must(req_string).split(",").map(&:strip).map do |r|
|
53
55
|
convert_rust_constraint_to_ruby_constraint(r.strip)
|
54
56
|
end
|
55
57
|
end
|
@@ -59,6 +61,7 @@ module Dependabot
|
|
59
61
|
|
60
62
|
private
|
61
63
|
|
64
|
+
sig { params(req_string: String).returns(T.any(String, T::Array[String])) }
|
62
65
|
def convert_rust_constraint_to_ruby_constraint(req_string)
|
63
66
|
if req_string.include?("*")
|
64
67
|
ruby_range(req_string.gsub(/(?:\.|^)[*]/, "").gsub(/^[^\d]/, ""))
|
@@ -70,6 +73,7 @@ module Dependabot
|
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
76
|
+
sig { params(req_string: String).returns(String) }
|
73
77
|
def convert_tilde_req(req_string)
|
74
78
|
version = req_string.gsub(/^~/, "")
|
75
79
|
parts = version.split(".")
|
@@ -77,6 +81,7 @@ module Dependabot
|
|
77
81
|
"~> #{parts.join('.')}"
|
78
82
|
end
|
79
83
|
|
84
|
+
sig { params(req_string: String).returns(String) }
|
80
85
|
def ruby_range(req_string)
|
81
86
|
parts = req_string.split(".")
|
82
87
|
|
@@ -91,12 +96,13 @@ module Dependabot
|
|
91
96
|
"~> #{parts.join('.')}"
|
92
97
|
end
|
93
98
|
|
99
|
+
sig { params(req_string: String).returns(T::Array[String]) }
|
94
100
|
def convert_caret_req(req_string)
|
95
101
|
version = req_string.gsub(/^\^/, "")
|
96
102
|
parts = version.split(".")
|
97
103
|
first_non_zero = parts.find { |d| d != "0" }
|
98
104
|
first_non_zero_index =
|
99
|
-
first_non_zero ? parts.index(first_non_zero) : parts.count - 1
|
105
|
+
first_non_zero ? T.must(parts.index(first_non_zero)) : parts.count - 1
|
100
106
|
upper_bound = parts.map.with_index do |part, i|
|
101
107
|
if i < first_non_zero_index then part
|
102
108
|
elsif i == first_non_zero_index then (part.to_i + 1).to_s
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-cargo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.312.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-05-
|
10
|
+
date: 2025-05-09 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: dependabot-common
|
@@ -15,28 +15,28 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - '='
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.
|
18
|
+
version: 0.312.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.
|
25
|
+
version: 0.312.0
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: debug
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.9
|
32
|
+
version: '1.9'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 1.9
|
39
|
+
version: '1.9'
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: gpgme
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
@@ -57,14 +57,14 @@ dependencies:
|
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '13'
|
60
|
+
version: '13.2'
|
61
61
|
type: :development
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '13'
|
67
|
+
version: '13.2'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
69
|
name: rspec
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,98 +99,98 @@ dependencies:
|
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: 1.9
|
102
|
+
version: '1.9'
|
103
103
|
type: :development
|
104
104
|
prerelease: false
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: 1.9
|
109
|
+
version: '1.9'
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
111
|
name: rubocop
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: 1.67
|
116
|
+
version: '1.67'
|
117
117
|
type: :development
|
118
118
|
prerelease: false
|
119
119
|
version_requirements: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
121
|
- - "~>"
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: 1.67
|
123
|
+
version: '1.67'
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: rubocop-performance
|
126
126
|
requirement: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 1.22
|
130
|
+
version: '1.22'
|
131
131
|
type: :development
|
132
132
|
prerelease: false
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: 1.22
|
137
|
+
version: '1.22'
|
138
138
|
- !ruby/object:Gem::Dependency
|
139
139
|
name: rubocop-rspec
|
140
140
|
requirement: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
142
|
- - "~>"
|
143
143
|
- !ruby/object:Gem::Version
|
144
|
-
version: 2.29
|
144
|
+
version: '2.29'
|
145
145
|
type: :development
|
146
146
|
prerelease: false
|
147
147
|
version_requirements: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - "~>"
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version: 2.29
|
151
|
+
version: '2.29'
|
152
152
|
- !ruby/object:Gem::Dependency
|
153
153
|
name: rubocop-sorbet
|
154
154
|
requirement: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
156
|
- - "~>"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: 0.8
|
158
|
+
version: '0.8'
|
159
159
|
type: :development
|
160
160
|
prerelease: false
|
161
161
|
version_requirements: !ruby/object:Gem::Requirement
|
162
162
|
requirements:
|
163
163
|
- - "~>"
|
164
164
|
- !ruby/object:Gem::Version
|
165
|
-
version: 0.8
|
165
|
+
version: '0.8'
|
166
166
|
- !ruby/object:Gem::Dependency
|
167
167
|
name: simplecov
|
168
168
|
requirement: !ruby/object:Gem::Requirement
|
169
169
|
requirements:
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: 0.22
|
172
|
+
version: '0.22'
|
173
173
|
type: :development
|
174
174
|
prerelease: false
|
175
175
|
version_requirements: !ruby/object:Gem::Requirement
|
176
176
|
requirements:
|
177
177
|
- - "~>"
|
178
178
|
- !ruby/object:Gem::Version
|
179
|
-
version: 0.22
|
179
|
+
version: '0.22'
|
180
180
|
- !ruby/object:Gem::Dependency
|
181
181
|
name: turbo_tests
|
182
182
|
requirement: !ruby/object:Gem::Requirement
|
183
183
|
requirements:
|
184
184
|
- - "~>"
|
185
185
|
- !ruby/object:Gem::Version
|
186
|
-
version: 2.2
|
186
|
+
version: '2.2'
|
187
187
|
type: :development
|
188
188
|
prerelease: false
|
189
189
|
version_requirements: !ruby/object:Gem::Requirement
|
190
190
|
requirements:
|
191
191
|
- - "~>"
|
192
192
|
- !ruby/object:Gem::Version
|
193
|
-
version: 2.2
|
193
|
+
version: '2.2'
|
194
194
|
- !ruby/object:Gem::Dependency
|
195
195
|
name: vcr
|
196
196
|
requirement: !ruby/object:Gem::Requirement
|
@@ -265,7 +265,7 @@ licenses:
|
|
265
265
|
- MIT
|
266
266
|
metadata:
|
267
267
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
268
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
268
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.312.0
|
269
269
|
rdoc_options: []
|
270
270
|
require_paths:
|
271
271
|
- lib
|