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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/Manifest.txt +2 -2
  4. data/bundler/CHANGELOG.md +15 -0
  5. data/bundler/lib/bundler/build_metadata.rb +2 -2
  6. data/bundler/lib/bundler/cli/check.rb +1 -1
  7. data/bundler/lib/bundler/definition.rb +6 -0
  8. data/bundler/lib/bundler/installer.rb +0 -1
  9. data/bundler/lib/bundler/plugin/installer.rb +2 -0
  10. data/bundler/lib/bundler/plugin.rb +23 -6
  11. data/bundler/lib/bundler/rubygems_integration.rb +2 -0
  12. data/bundler/lib/bundler/settings.rb +9 -1
  13. data/bundler/lib/bundler/source/rubygems.rb +8 -1
  14. data/bundler/lib/bundler/source.rb +2 -0
  15. data/bundler/lib/bundler/source_list.rb +4 -0
  16. data/bundler/lib/bundler/spec_set.rb +1 -1
  17. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -1
  18. data/bundler/lib/bundler/version.rb +1 -1
  19. data/bundler/lib/bundler.rb +11 -17
  20. data/lib/rubygems/command_manager.rb +3 -3
  21. data/lib/rubygems/commands/build_command.rb +3 -3
  22. data/lib/rubygems/commands/cert_command.rb +2 -2
  23. data/lib/rubygems/commands/check_command.rb +4 -4
  24. data/lib/rubygems/commands/cleanup_command.rb +3 -3
  25. data/lib/rubygems/commands/contents_command.rb +2 -2
  26. data/lib/rubygems/commands/dependency_command.rb +3 -3
  27. data/lib/rubygems/commands/environment_command.rb +1 -1
  28. data/lib/rubygems/commands/fetch_command.rb +3 -3
  29. data/lib/rubygems/commands/generate_index_command.rb +2 -2
  30. data/lib/rubygems/commands/help_command.rb +1 -1
  31. data/lib/rubygems/commands/info_command.rb +2 -2
  32. data/lib/rubygems/commands/install_command.rb +12 -11
  33. data/lib/rubygems/commands/list_command.rb +2 -2
  34. data/lib/rubygems/commands/lock_command.rb +1 -1
  35. data/lib/rubygems/commands/mirror_command.rb +1 -1
  36. data/lib/rubygems/commands/open_command.rb +2 -2
  37. data/lib/rubygems/commands/outdated_command.rb +4 -4
  38. data/lib/rubygems/commands/owner_command.rb +4 -4
  39. data/lib/rubygems/commands/pristine_command.rb +5 -5
  40. data/lib/rubygems/commands/push_command.rb +4 -4
  41. data/lib/rubygems/commands/query_command.rb +3 -3
  42. data/lib/rubygems/commands/rdoc_command.rb +3 -3
  43. data/lib/rubygems/commands/search_command.rb +2 -2
  44. data/lib/rubygems/commands/server_command.rb +3 -3
  45. data/lib/rubygems/commands/setup_command.rb +5 -5
  46. data/lib/rubygems/commands/signin_command.rb +2 -2
  47. data/lib/rubygems/commands/signout_command.rb +1 -1
  48. data/lib/rubygems/commands/sources_command.rb +4 -4
  49. data/lib/rubygems/commands/specification_command.rb +4 -4
  50. data/lib/rubygems/commands/stale_command.rb +1 -1
  51. data/lib/rubygems/commands/uninstall_command.rb +3 -3
  52. data/lib/rubygems/commands/unpack_command.rb +5 -5
  53. data/lib/rubygems/commands/update_command.rb +9 -9
  54. data/lib/rubygems/commands/which_command.rb +1 -1
  55. data/lib/rubygems/commands/yank_command.rb +4 -4
  56. data/lib/rubygems/config_file.rb +1 -1
  57. data/lib/rubygems/dependency_installer.rb +8 -8
  58. data/lib/rubygems/dependency_list.rb +1 -1
  59. data/lib/rubygems/doctor.rb +2 -2
  60. data/lib/rubygems/exceptions.rb +1 -1
  61. data/lib/rubygems/gem_runner.rb +3 -3
  62. data/lib/rubygems/gemcutter_utilities.rb +2 -2
  63. data/lib/rubygems/indexer.rb +2 -2
  64. data/lib/rubygems/install_default_message.rb +2 -2
  65. data/lib/rubygems/install_message.rb +2 -2
  66. data/lib/rubygems/install_update_options.rb +2 -2
  67. data/lib/rubygems/installer.rb +7 -7
  68. data/lib/rubygems/local_remote_options.rb +1 -1
  69. data/lib/rubygems/mock_gem_ui.rb +1 -1
  70. data/lib/rubygems/package/tar_reader.rb +1 -1
  71. data/lib/rubygems/package.rb +12 -12
  72. data/lib/rubygems/package_task.rb +2 -2
  73. data/lib/rubygems/platform.rb +1 -1
  74. data/lib/rubygems/rdoc.rb +1 -1
  75. data/lib/rubygems/remote_fetcher.rb +14 -20
  76. data/lib/rubygems/request.rb +5 -5
  77. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  78. data/lib/rubygems/request_set/lockfile.rb +1 -1
  79. data/lib/rubygems/request_set.rb +4 -4
  80. data/lib/rubygems/requirement.rb +1 -1
  81. data/lib/rubygems/resolver/git_specification.rb +1 -1
  82. data/lib/rubygems/resolver/installer_set.rb +3 -3
  83. data/lib/rubygems/resolver/molinillo.rb +1 -1
  84. data/lib/rubygems/resolver/specification.rb +1 -1
  85. data/lib/rubygems/resolver.rb +31 -31
  86. data/lib/rubygems/security/policy.rb +1 -1
  87. data/lib/rubygems/security/signer.rb +1 -1
  88. data/lib/rubygems/security.rb +5 -5
  89. data/lib/rubygems/security_option.rb +2 -2
  90. data/lib/rubygems/server.rb +2 -2
  91. data/lib/rubygems/source.rb +6 -6
  92. data/lib/rubygems/spec_fetcher.rb +5 -5
  93. data/lib/rubygems/specification.rb +9 -9
  94. data/lib/rubygems/specification_policy.rb +1 -1
  95. data/lib/rubygems/uninstaller.rb +6 -6
  96. data/lib/rubygems/uri.rb +102 -0
  97. data/lib/rubygems/user_interaction.rb +2 -2
  98. data/lib/rubygems/util/licenses.rb +1 -1
  99. data/lib/rubygems/validator.rb +2 -2
  100. data/lib/rubygems/version_option.rb +1 -1
  101. data/lib/rubygems.rb +15 -15
  102. data/rubygems-update.gemspec +1 -1
  103. data/test/rubygems/test_gem_commands_install_command.rb +25 -0
  104. data/test/rubygems/test_gem_remote_fetcher.rb +30 -0
  105. data/test/rubygems/test_gem_request.rb +30 -4
  106. data/test/rubygems/test_gem_resolver_installer_set.rb +18 -0
  107. data/test/rubygems/test_gem_uri.rb +32 -0
  108. metadata +5 -5
  109. data/lib/rubygems/uri_parser.rb +0 -34
  110. 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
- @request = make_request(uri, Net::HTTP::Get, nil, nil)
203
- @request.fetch
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
- @request = make_request(uri, Net::HTTP::Get, nil, nil)
215
- @request.fetch
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.26
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-08-17 00:00:00.000000000 Z
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.26
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.
@@ -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
@@ -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