rubygems-await 0.1.5 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/exe/rubygems-await +5 -0
- data/fixtures/vcr_cassettes/2023-12-01.yml +388002 -0
- data/lib/rubygems/await/version.rb +1 -1
- data/lib/rubygems/await.rb +28 -5
- data/lib/rubygems/commands/await_command.rb +9 -4
- data/lib/rubygems_plugin.rb +1 -1
- metadata +10 -7
data/lib/rubygems/await.rb
CHANGED
@@ -7,6 +7,17 @@ module Rubygems
|
|
7
7
|
class Error < StandardError; end
|
8
8
|
|
9
9
|
class Awaiter
|
10
|
+
unless respond_to?(:subclasses)
|
11
|
+
def self.subclasses
|
12
|
+
@subclasses ||= []
|
13
|
+
end
|
14
|
+
|
15
|
+
def inherited(klass)
|
16
|
+
super(klass)
|
17
|
+
subclasses << klass
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
10
21
|
attr_reader :gems, :source, :deadline, :name_indent, :source_uri
|
11
22
|
|
12
23
|
def initialize(gems, source, deadline, name_indent = 10)
|
@@ -125,7 +136,7 @@ module Rubygems
|
|
125
136
|
raise NotImplementedError
|
126
137
|
end
|
127
138
|
|
128
|
-
def log(level: "info", tags: nil
|
139
|
+
def log(level: "info", tags: nil)
|
129
140
|
return unless Bundler.ui.level(level)
|
130
141
|
|
131
142
|
s = Time.now.to_s << " "
|
@@ -155,6 +166,14 @@ module Rubygems
|
|
155
166
|
def expired?(padding = 0)
|
156
167
|
Time.now + padding > deadline
|
157
168
|
end
|
169
|
+
|
170
|
+
def safe_load_marshal(contents)
|
171
|
+
if Bundler.respond_to?(:safe_load_marshal)
|
172
|
+
Bundler.safe_load_marshal(contents)
|
173
|
+
else
|
174
|
+
Marshal.load(contents) # rubocop:disable Security/MarshalLoad
|
175
|
+
end
|
176
|
+
end
|
158
177
|
end
|
159
178
|
|
160
179
|
class VersionsAwaiter < Awaiter
|
@@ -231,7 +250,11 @@ module Rubygems
|
|
231
250
|
|
232
251
|
downloader.fetch(uri)
|
233
252
|
true
|
234
|
-
rescue Bundler::Fetcher::AuthenticationForbiddenError
|
253
|
+
rescue (if defined?(::Bundler::Fetcher::AuthenticationForbiddenError)
|
254
|
+
::Bundler::Fetcher::AuthenticationForbiddenError
|
255
|
+
else
|
256
|
+
::Bundler::Fetcher::AuthenticationRequiredError
|
257
|
+
end) => e
|
235
258
|
log_error(e) { "#{Bundler::URICredentialsFilter.credential_filtered_uri(uri)} not found" }
|
236
259
|
false
|
237
260
|
end
|
@@ -276,7 +299,7 @@ module Rubygems
|
|
276
299
|
fetcher = Bundler.rubygems.gem_remote_fetcher
|
277
300
|
path = source_uri + "specs.#{Gem.marshal_version}.gz"
|
278
301
|
contents = fetcher.fetch_path(path)
|
279
|
-
idx =
|
302
|
+
idx = safe_load_marshal(contents)
|
280
303
|
|
281
304
|
idx.each do |found|
|
282
305
|
tuple = Gem::NameTuple.new(*found.map!(&:to_s))
|
@@ -298,7 +321,7 @@ module Rubygems
|
|
298
321
|
fetcher = Bundler.rubygems.gem_remote_fetcher
|
299
322
|
path = source_uri + "prerelease_specs.#{Gem.marshal_version}.gz"
|
300
323
|
contents = fetcher.fetch_path(path)
|
301
|
-
idx =
|
324
|
+
idx = safe_load_marshal(contents)
|
302
325
|
|
303
326
|
idx.each do |found|
|
304
327
|
tuple = Gem::NameTuple.new(*found.map!(&:to_s))
|
@@ -320,7 +343,7 @@ module Rubygems
|
|
320
343
|
dependency_api_uri = "#{source_uri}api/v1/dependencies"
|
321
344
|
dependency_api_uri.query = URI.encode_www_form(gems: missing.keys.sort)
|
322
345
|
marshalled_deps = downloader.fetch(dependency_api_uri).body
|
323
|
-
deps =
|
346
|
+
deps = safe_load_marshal(marshalled_deps)
|
324
347
|
|
325
348
|
deps.each do |s|
|
326
349
|
name, number, platform = s.values_at(:name, :number, :platform)
|
@@ -18,7 +18,7 @@ module Gem
|
|
18
18
|
|
19
19
|
defaults = {
|
20
20
|
timeout: 5 * 60,
|
21
|
-
awaiters
|
21
|
+
awaiters: awaiters,
|
22
22
|
skip: ["dependency api"],
|
23
23
|
only: nil
|
24
24
|
}
|
@@ -68,7 +68,12 @@ module Gem
|
|
68
68
|
end
|
69
69
|
|
70
70
|
gems = options[:args].map do |s|
|
71
|
-
|
71
|
+
if s.end_with?(".gem")
|
72
|
+
require "rubygems/package"
|
73
|
+
parts = Gem::Package.new(s).spec.name_tuple.to_a.compact.map(&:to_s)
|
74
|
+
else
|
75
|
+
parts = s.split(":", 3)
|
76
|
+
end
|
72
77
|
raise Gem::CommandLineError, "Please specify a name:version[:platform], given #{s.inspect}" if parts.size < 2
|
73
78
|
|
74
79
|
unless Gem::Version.correct?(parts[1])
|
@@ -115,7 +120,7 @@ module Gem
|
|
115
120
|
all_missing.uniq!
|
116
121
|
all_missing.map! { Bundler.ui.add_color(_1.respond_to?(:full_name) ? _1.full_name : _1.to_s, :red, :bold) }
|
117
122
|
log(level: "error") do
|
118
|
-
Bundler.ui.add_color("Timed out", :red) << " after " <<
|
123
|
+
Bundler.ui.add_color(+"Timed out", :red) << " after " <<
|
119
124
|
Bundler.ui.add_color("#{Time.now.-(start).round(2)}s", :white, :bold) <<
|
120
125
|
". Check that #{all_missing.join(", ")} are published."
|
121
126
|
end
|
@@ -148,7 +153,7 @@ module Gem
|
|
148
153
|
|
149
154
|
private
|
150
155
|
|
151
|
-
def log(level: "info", tags: nil
|
156
|
+
def log(level: "info", tags: nil)
|
152
157
|
return unless Bundler.ui.level(level)
|
153
158
|
|
154
159
|
s = Time.now.to_s << " "
|
data/lib/rubygems_plugin.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-await
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Giddins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,18 +16,19 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
19
|
+
version: '2.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '2.
|
26
|
+
version: '2.2'
|
27
27
|
description:
|
28
28
|
email:
|
29
29
|
- segiddins@segiddins.me
|
30
|
-
executables:
|
30
|
+
executables:
|
31
|
+
- rubygems-await
|
31
32
|
extensions: []
|
32
33
|
extra_rdoc_files: []
|
33
34
|
files:
|
@@ -37,6 +38,8 @@ files:
|
|
37
38
|
- LICENSE.txt
|
38
39
|
- README.md
|
39
40
|
- Rakefile
|
41
|
+
- exe/rubygems-await
|
42
|
+
- fixtures/vcr_cassettes/2023-12-01.yml
|
40
43
|
- lib/rubygems/await.rb
|
41
44
|
- lib/rubygems/await/version.rb
|
42
45
|
- lib/rubygems/commands/await_command.rb
|
@@ -58,12 +61,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
58
61
|
requirements:
|
59
62
|
- - ">="
|
60
63
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
64
|
+
version: '3.0'
|
62
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
66
|
requirements:
|
64
67
|
- - ">="
|
65
68
|
- !ruby/object:Gem::Version
|
66
|
-
version: '3.
|
69
|
+
version: '3.2'
|
67
70
|
requirements: []
|
68
71
|
rubygems_version: 3.4.10
|
69
72
|
signing_key:
|