rubygems-await 0.1.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Rubygems
4
4
  module Await
5
- VERSION = "0.1.5"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
@@ -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 => e
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 = Bundler.safe_load_marshal(contents)
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 = Bundler.safe_load_marshal(contents)
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 = Bundler.safe_load_marshal(marshalled_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
- parts = s.split(":", 3)
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 << " "
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubygems/command"
3
+ require "rubygems/command_manager"
4
4
  Gem::CommandManager.instance.register_command :await
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.1.5
4
+ version: 0.3.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-10-23 00:00:00.000000000 Z
11
+ date: 2023-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.4'
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.4'
26
+ version: '2.2'
27
27
  description:
28
28
  email:
29
29
  - segiddins@segiddins.me
@@ -37,6 +37,7 @@ files:
37
37
  - LICENSE.txt
38
38
  - README.md
39
39
  - Rakefile
40
+ - fixtures/vcr_cassettes/2023-12-01.yml
40
41
  - lib/rubygems/await.rb
41
42
  - lib/rubygems/await/version.rb
42
43
  - lib/rubygems/commands/await_command.rb
@@ -58,12 +59,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="
60
61
  - !ruby/object:Gem::Version
61
- version: '3.2'
62
+ version: '3.0'
62
63
  required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  requirements:
64
65
  - - ">="
65
66
  - !ruby/object:Gem::Version
66
- version: '3.4'
67
+ version: '3.2'
67
68
  requirements: []
68
69
  rubygems_version: 3.4.10
69
70
  signing_key: