rubygems-update 3.2.26 → 3.2.27
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Manifest.txt +2 -2
- data/bundler/CHANGELOG.md +15 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/definition.rb +6 -0
- data/bundler/lib/bundler/installer.rb +0 -1
- data/bundler/lib/bundler/plugin/installer.rb +2 -0
- data/bundler/lib/bundler/plugin.rb +23 -6
- data/bundler/lib/bundler/rubygems_integration.rb +2 -0
- data/bundler/lib/bundler/settings.rb +9 -1
- data/bundler/lib/bundler/source/rubygems.rb +8 -1
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/source_list.rb +4 -0
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +11 -17
- data/lib/rubygems/command_manager.rb +3 -3
- data/lib/rubygems/commands/build_command.rb +3 -3
- data/lib/rubygems/commands/cert_command.rb +2 -2
- data/lib/rubygems/commands/check_command.rb +4 -4
- data/lib/rubygems/commands/cleanup_command.rb +3 -3
- data/lib/rubygems/commands/contents_command.rb +2 -2
- data/lib/rubygems/commands/dependency_command.rb +3 -3
- data/lib/rubygems/commands/environment_command.rb +1 -1
- data/lib/rubygems/commands/fetch_command.rb +3 -3
- data/lib/rubygems/commands/generate_index_command.rb +2 -2
- data/lib/rubygems/commands/help_command.rb +1 -1
- data/lib/rubygems/commands/info_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +12 -11
- data/lib/rubygems/commands/list_command.rb +2 -2
- data/lib/rubygems/commands/lock_command.rb +1 -1
- data/lib/rubygems/commands/mirror_command.rb +1 -1
- data/lib/rubygems/commands/open_command.rb +2 -2
- data/lib/rubygems/commands/outdated_command.rb +4 -4
- data/lib/rubygems/commands/owner_command.rb +4 -4
- data/lib/rubygems/commands/pristine_command.rb +5 -5
- data/lib/rubygems/commands/push_command.rb +4 -4
- data/lib/rubygems/commands/query_command.rb +3 -3
- data/lib/rubygems/commands/rdoc_command.rb +3 -3
- data/lib/rubygems/commands/search_command.rb +2 -2
- data/lib/rubygems/commands/server_command.rb +3 -3
- data/lib/rubygems/commands/setup_command.rb +5 -5
- data/lib/rubygems/commands/signin_command.rb +2 -2
- data/lib/rubygems/commands/signout_command.rb +1 -1
- data/lib/rubygems/commands/sources_command.rb +4 -4
- data/lib/rubygems/commands/specification_command.rb +4 -4
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +3 -3
- data/lib/rubygems/commands/unpack_command.rb +5 -5
- data/lib/rubygems/commands/update_command.rb +9 -9
- data/lib/rubygems/commands/which_command.rb +1 -1
- data/lib/rubygems/commands/yank_command.rb +4 -4
- data/lib/rubygems/config_file.rb +1 -1
- data/lib/rubygems/dependency_installer.rb +8 -8
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/doctor.rb +2 -2
- data/lib/rubygems/exceptions.rb +1 -1
- data/lib/rubygems/gem_runner.rb +3 -3
- data/lib/rubygems/gemcutter_utilities.rb +2 -2
- data/lib/rubygems/indexer.rb +2 -2
- data/lib/rubygems/install_default_message.rb +2 -2
- data/lib/rubygems/install_message.rb +2 -2
- data/lib/rubygems/install_update_options.rb +2 -2
- data/lib/rubygems/installer.rb +7 -7
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/mock_gem_ui.rb +1 -1
- data/lib/rubygems/package/tar_reader.rb +1 -1
- data/lib/rubygems/package.rb +12 -12
- data/lib/rubygems/package_task.rb +2 -2
- data/lib/rubygems/platform.rb +1 -1
- data/lib/rubygems/rdoc.rb +1 -1
- data/lib/rubygems/remote_fetcher.rb +14 -20
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
- data/lib/rubygems/request_set/lockfile.rb +1 -1
- data/lib/rubygems/request_set.rb +4 -4
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/resolver/git_specification.rb +1 -1
- data/lib/rubygems/resolver/installer_set.rb +3 -3
- data/lib/rubygems/resolver/molinillo.rb +1 -1
- data/lib/rubygems/resolver/specification.rb +1 -1
- data/lib/rubygems/resolver.rb +31 -31
- data/lib/rubygems/security/policy.rb +1 -1
- data/lib/rubygems/security/signer.rb +1 -1
- data/lib/rubygems/security.rb +5 -5
- data/lib/rubygems/security_option.rb +2 -2
- data/lib/rubygems/server.rb +2 -2
- data/lib/rubygems/source.rb +6 -6
- data/lib/rubygems/spec_fetcher.rb +5 -5
- data/lib/rubygems/specification.rb +9 -9
- data/lib/rubygems/specification_policy.rb +1 -1
- data/lib/rubygems/uninstaller.rb +6 -6
- data/lib/rubygems/uri.rb +102 -0
- data/lib/rubygems/user_interaction.rb +2 -2
- data/lib/rubygems/util/licenses.rb +1 -1
- data/lib/rubygems/validator.rb +2 -2
- data/lib/rubygems/version_option.rb +1 -1
- data/lib/rubygems.rb +15 -15
- data/rubygems-update.gemspec +1 -1
- data/test/rubygems/test_gem_commands_install_command.rb +25 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +30 -0
- data/test/rubygems/test_gem_request.rb +30 -4
- data/test/rubygems/test_gem_resolver_installer_set.rb +18 -0
- data/test/rubygems/test_gem_uri.rb +32 -0
- metadata +5 -5
- data/lib/rubygems/uri_parser.rb +0 -34
- data/lib/rubygems/uri_parsing.rb +0 -23
@@ -241,6 +241,36 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
241
241
|
assert File.exist?(a1_cache_gem)
|
242
242
|
end
|
243
243
|
|
244
|
+
def test_download_with_token
|
245
|
+
a1_data = nil
|
246
|
+
File.open @a1_gem, 'rb' do |fp|
|
247
|
+
a1_data = fp.read
|
248
|
+
end
|
249
|
+
|
250
|
+
fetcher = util_fuck_with_fetcher a1_data
|
251
|
+
|
252
|
+
a1_cache_gem = @a1.cache_file
|
253
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, 'http://token@gems.example.com')
|
254
|
+
assert_equal("http://token@gems.example.com/gems/a-1.gem",
|
255
|
+
fetcher.instance_variable_get(:@test_arg).to_s)
|
256
|
+
assert File.exist?(a1_cache_gem)
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_download_with_x_oauth_basic
|
260
|
+
a1_data = nil
|
261
|
+
File.open @a1_gem, 'rb' do |fp|
|
262
|
+
a1_data = fp.read
|
263
|
+
end
|
264
|
+
|
265
|
+
fetcher = util_fuck_with_fetcher a1_data
|
266
|
+
|
267
|
+
a1_cache_gem = @a1.cache_file
|
268
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, 'http://token:x-oauth-basic@gems.example.com')
|
269
|
+
assert_equal("http://token:x-oauth-basic@gems.example.com/gems/a-1.gem",
|
270
|
+
fetcher.instance_variable_get(:@test_arg).to_s)
|
271
|
+
assert File.exist?(a1_cache_gem)
|
272
|
+
end
|
273
|
+
|
244
274
|
def test_download_with_encoded_auth
|
245
275
|
a1_data = nil
|
246
276
|
File.open @a1_gem, 'rb' do |fp|
|
@@ -197,27 +197,53 @@ class TestGemRequest < Gem::TestCase
|
|
197
197
|
end
|
198
198
|
|
199
199
|
def test_fetch_basic_auth
|
200
|
+
Gem.configuration.verbose = :really
|
200
201
|
uri = URI.parse "https://user:pass@example.rubygems/specs.#{Gem.marshal_version}"
|
201
202
|
conn = util_stub_net_http(:body => :junk, :code => 200) do |c|
|
202
|
-
@
|
203
|
-
|
203
|
+
use_ui @ui do
|
204
|
+
@request = make_request(uri, Net::HTTP::Get, nil, nil)
|
205
|
+
@request.fetch
|
206
|
+
end
|
204
207
|
c
|
205
208
|
end
|
206
209
|
|
207
210
|
auth_header = conn.payload['Authorization']
|
208
211
|
assert_equal "Basic #{Base64.encode64('user:pass')}".strip, auth_header
|
212
|
+
assert_includes @ui.output, "GET https://user:REDACTED@example.rubygems/specs.#{Gem.marshal_version}"
|
209
213
|
end
|
210
214
|
|
211
215
|
def test_fetch_basic_auth_encoded
|
216
|
+
Gem.configuration.verbose = :really
|
212
217
|
uri = URI.parse "https://user:%7BDEScede%7Dpass@example.rubygems/specs.#{Gem.marshal_version}"
|
218
|
+
|
213
219
|
conn = util_stub_net_http(:body => :junk, :code => 200) do |c|
|
214
|
-
@
|
215
|
-
|
220
|
+
use_ui @ui do
|
221
|
+
@request = make_request(uri, Net::HTTP::Get, nil, nil)
|
222
|
+
@request.fetch
|
223
|
+
end
|
216
224
|
c
|
217
225
|
end
|
218
226
|
|
219
227
|
auth_header = conn.payload['Authorization']
|
220
228
|
assert_equal "Basic #{Base64.encode64('user:{DEScede}pass')}".strip, auth_header
|
229
|
+
assert_includes @ui.output, "GET https://user:REDACTED@example.rubygems/specs.#{Gem.marshal_version}"
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_fetch_basic_oauth_encoded
|
233
|
+
Gem.configuration.verbose = :really
|
234
|
+
uri = URI.parse "https://%7BDEScede%7Dpass:x-oauth-basic@example.rubygems/specs.#{Gem.marshal_version}"
|
235
|
+
|
236
|
+
conn = util_stub_net_http(:body => :junk, :code => 200) do |c|
|
237
|
+
use_ui @ui do
|
238
|
+
@request = make_request(uri, Net::HTTP::Get, nil, nil)
|
239
|
+
@request.fetch
|
240
|
+
end
|
241
|
+
c
|
242
|
+
end
|
243
|
+
|
244
|
+
auth_header = conn.payload['Authorization']
|
245
|
+
assert_equal "Basic #{Base64.encode64('{DEScede}pass:x-oauth-basic')}".strip, auth_header
|
246
|
+
assert_includes @ui.output, "GET https://REDACTED:x-oauth-basic@example.rubygems/specs.#{Gem.marshal_version}"
|
221
247
|
end
|
222
248
|
|
223
249
|
def test_fetch_head
|
@@ -64,6 +64,24 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|
64
64
|
assert_equal %w[a-1], set.always_install.map {|s| s.full_name }
|
65
65
|
end
|
66
66
|
|
67
|
+
def test_add_always_install_prerelease_github_problem
|
68
|
+
spec_fetcher do |fetcher|
|
69
|
+
fetcher.gem 'a', 1
|
70
|
+
end
|
71
|
+
|
72
|
+
# Github has an issue in which it will generate a misleading prerelease output in its RubyGems server API and
|
73
|
+
# returns a 0 version for the gem while it doesn't exist.
|
74
|
+
@fetcher.data["#{@gem_repo}prerelease_specs.#{Gem.marshal_version}.gz"] = util_gzip(Marshal.dump([
|
75
|
+
Gem::NameTuple.new('a', Gem::Version.new(0), 'ruby'),
|
76
|
+
]))
|
77
|
+
|
78
|
+
set = Gem::Resolver::InstallerSet.new :both
|
79
|
+
|
80
|
+
set.add_always_install dep('a')
|
81
|
+
|
82
|
+
assert_equal %w[a-1], set.always_install.map {|s| s.full_name }
|
83
|
+
end
|
84
|
+
|
67
85
|
def test_add_always_install_prerelease_only
|
68
86
|
spec_fetcher do |fetcher|
|
69
87
|
fetcher.gem 'a', '3.a'
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
require 'rubygems/uri'
|
3
|
+
|
4
|
+
class TestUri < Gem::TestCase
|
5
|
+
def test_to_s_not_string
|
6
|
+
assert_equal "not_a_uri", Gem::Uri.new(:not_a_uri).to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_to_s_invalid_uri
|
10
|
+
assert_equal "https://www.example.com:80index", Gem::Uri.new("https://www.example.com:80index").to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_redacted_with_user_pass
|
14
|
+
assert_equal "https://user:REDACTED@example.com", Gem::Uri.new("https://user:pass@example.com").redacted.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_redacted_with_token
|
18
|
+
assert_equal "https://REDACTED@example.com", Gem::Uri.new("https://token@example.com").redacted.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_redacted_with_user_x_oauth_basic
|
22
|
+
assert_equal "https://REDACTED:x-oauth-basic@example.com", Gem::Uri.new("https://token:x-oauth-basic@example.com").redacted.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_redacted_without_credential
|
26
|
+
assert_equal "https://www.example.com", Gem::Uri.new("https://www.example.com").redacted.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_redacted_with_invalid_uri
|
30
|
+
assert_equal "https://www.example.com:80index", Gem::Uri.new("https://www.example.com:80index").redacted.to_s
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-update
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
@@ -16,7 +16,7 @@ authors:
|
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
|
-
date: 2021-
|
19
|
+
date: 2021-09-03 00:00:00.000000000 Z
|
20
20
|
dependencies: []
|
21
21
|
description: |-
|
22
22
|
A package (also known as a library) contains a set of functionality
|
@@ -541,9 +541,8 @@ files:
|
|
541
541
|
- lib/rubygems/stub_specification.rb
|
542
542
|
- lib/rubygems/text.rb
|
543
543
|
- lib/rubygems/uninstaller.rb
|
544
|
+
- lib/rubygems/uri.rb
|
544
545
|
- lib/rubygems/uri_formatter.rb
|
545
|
-
- lib/rubygems/uri_parser.rb
|
546
|
-
- lib/rubygems/uri_parsing.rb
|
547
546
|
- lib/rubygems/user_interaction.rb
|
548
547
|
- lib/rubygems/util.rb
|
549
548
|
- lib/rubygems/util/licenses.rb
|
@@ -734,6 +733,7 @@ files:
|
|
734
733
|
- test/rubygems/test_gem_text.rb
|
735
734
|
- test/rubygems/test_gem_uninstaller.rb
|
736
735
|
- test/rubygems/test_gem_unsatisfiable_dependency_error.rb
|
736
|
+
- test/rubygems/test_gem_uri.rb
|
737
737
|
- test/rubygems/test_gem_uri_formatter.rb
|
738
738
|
- test/rubygems/test_gem_util.rb
|
739
739
|
- test/rubygems/test_gem_validator.rb
|
@@ -771,7 +771,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
771
771
|
- !ruby/object:Gem::Version
|
772
772
|
version: '0'
|
773
773
|
requirements: []
|
774
|
-
rubygems_version: 3.2.
|
774
|
+
rubygems_version: 3.2.27
|
775
775
|
signing_key:
|
776
776
|
specification_version: 4
|
777
777
|
summary: RubyGems is a package management framework for Ruby.
|
data/lib/rubygems/uri_parser.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
##
|
4
|
-
# The UriParser handles parsing URIs.
|
5
|
-
#
|
6
|
-
|
7
|
-
class Gem::UriParser
|
8
|
-
##
|
9
|
-
# Parses the #uri, raising if it's invalid
|
10
|
-
|
11
|
-
def parse!(uri)
|
12
|
-
raise URI::InvalidURIError unless uri
|
13
|
-
|
14
|
-
# Always escape URI's to deal with potential spaces and such
|
15
|
-
# It should also be considered that source_uri may already be
|
16
|
-
# a valid URI with escaped characters. e.g. "{DESede}" is encoded
|
17
|
-
# as "%7BDESede%7D". If this is escaped again the percentage
|
18
|
-
# symbols will be escaped.
|
19
|
-
begin
|
20
|
-
URI.parse(uri)
|
21
|
-
rescue URI::InvalidURIError
|
22
|
-
URI.parse(URI::DEFAULT_PARSER.escape(uri))
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
##
|
27
|
-
# Parses the #uri, returning the original uri if it's invalid
|
28
|
-
|
29
|
-
def parse(uri)
|
30
|
-
parse!(uri)
|
31
|
-
rescue URI::InvalidURIError
|
32
|
-
uri
|
33
|
-
end
|
34
|
-
end
|
data/lib/rubygems/uri_parsing.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "rubygems/uri_parser"
|
4
|
-
|
5
|
-
module Gem::UriParsing
|
6
|
-
|
7
|
-
def parse_uri(source_uri)
|
8
|
-
return source_uri unless source_uri.is_a?(String)
|
9
|
-
|
10
|
-
uri_parser.parse(source_uri)
|
11
|
-
end
|
12
|
-
|
13
|
-
private :parse_uri
|
14
|
-
|
15
|
-
def uri_parser
|
16
|
-
require "uri"
|
17
|
-
|
18
|
-
Gem::UriParser.new
|
19
|
-
end
|
20
|
-
|
21
|
-
private :uri_parser
|
22
|
-
|
23
|
-
end
|