rubygems-update 3.2.30 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +163 -4
- data/CONTRIBUTING.md +40 -10
- data/Manifest.txt +28 -5
- data/POLICIES.md +22 -8
- data/README.md +9 -7
- data/UPGRADING.md +5 -81
- data/bin/gem +1 -6
- data/bundler/CHANGELOG.md +86 -0
- data/bundler/exe/bundle +7 -8
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/doctor.rb +3 -2
- data/bundler/lib/bundler/cli/gem.rb +70 -8
- data/bundler/lib/bundler/cli/info.rb +6 -1
- data/bundler/lib/bundler/cli/install.rb +2 -0
- data/bundler/lib/bundler/cli/update.rb +2 -2
- data/bundler/lib/bundler/cli.rb +9 -1
- data/bundler/lib/bundler/compact_index_client/updater.rb +0 -5
- data/bundler/lib/bundler/definition.rb +66 -120
- data/bundler/lib/bundler/dependency.rb +5 -7
- data/bundler/lib/bundler/dsl.rb +18 -30
- data/bundler/lib/bundler/endpoint_specification.rb +0 -8
- data/bundler/lib/bundler/environment_preserver.rb +4 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +9 -4
- data/bundler/lib/bundler/fetcher.rb +2 -5
- data/bundler/lib/bundler/gem_helper.rb +2 -2
- data/bundler/lib/bundler/injector.rb +10 -1
- data/bundler/lib/bundler/installer/gem_installer.rb +1 -6
- data/bundler/lib/bundler/installer.rb +1 -4
- data/bundler/lib/bundler/lazy_specification.rb +17 -1
- data/bundler/lib/bundler/lockfile_parser.rb +10 -12
- data/bundler/lib/bundler/man/bundle-add.1 +10 -2
- data/bundler/lib/bundler/man/bundle-add.1.ronn +7 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +5 -5
- data/bundler/lib/bundler/man/bundle-config.1.ronn +5 -5
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +14 -1
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +16 -0
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1 +2 -2
- data/bundler/lib/bundler/man/bundle-install.1.ronn +2 -2
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +2 -2
- data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
- data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
- data/bundler/lib/bundler/man/bundle.1 +1 -1
- data/bundler/lib/bundler/man/gemfile.5 +28 -2
- data/bundler/lib/bundler/man/gemfile.5.ronn +9 -1
- data/bundler/lib/bundler/plugin/api/source.rb +1 -0
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/process_lock.rb +1 -1
- data/bundler/lib/bundler/psyched_yaml.rb +1 -13
- data/bundler/lib/bundler/resolver.rb +34 -31
- data/bundler/lib/bundler/rubygems_ext.rb +2 -0
- data/bundler/lib/bundler/rubygems_integration.rb +11 -48
- data/bundler/lib/bundler/runtime.rb +1 -1
- data/bundler/lib/bundler/self_manager.rb +73 -0
- data/bundler/lib/bundler/shared_helpers.rb +4 -12
- data/bundler/lib/bundler/source/git/git_proxy.rb +7 -4
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +17 -13
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +1 -1
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +7 -29
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +1 -1
- data/bundler/lib/bundler/templates/Gemfile +0 -2
- data/bundler/lib/bundler/templates/gems.rb +0 -3
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +5 -2
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +15 -2
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -2
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +13 -13
- data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/bundler/lib/bundler/ui/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/.document +1 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +9 -3
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/command.rb +4 -4
- data/lib/rubygems/command_manager.rb +4 -2
- data/lib/rubygems/commands/cert_command.rb +6 -6
- data/lib/rubygems/commands/fetch_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +5 -2
- data/lib/rubygems/commands/pristine_command.rb +8 -2
- data/lib/rubygems/commands/server_command.rb +14 -77
- data/lib/rubygems/commands/setup_command.rb +84 -76
- data/lib/rubygems/commands/uninstall_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +10 -5
- data/lib/rubygems/defaults.rb +2 -20
- data/lib/rubygems/dependency_list.rb +2 -2
- data/lib/rubygems/deprecate.rb +53 -6
- data/lib/rubygems/exceptions.rb +27 -1
- data/lib/rubygems/ext/builder.rb +11 -8
- data/lib/rubygems/ext/cmake_builder.rb +1 -1
- data/lib/rubygems/install_update_options.rb +13 -4
- data/lib/rubygems/installer.rb +46 -27
- data/lib/rubygems/local_remote_options.rb +3 -3
- data/lib/rubygems/name_tuple.rb +2 -3
- data/lib/rubygems/optparse/.document +1 -0
- data/lib/rubygems/optparse/COPYING +56 -0
- data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
- data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
- data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
- data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
- data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
- data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
- data/lib/rubygems/optparse/lib/optparse.rb +2230 -0
- data/lib/rubygems/optparse.rb +3 -0
- data/lib/rubygems/path_support.rb +1 -6
- data/lib/rubygems/platform.rb +4 -0
- data/lib/rubygems/remote_fetcher.rb +1 -1
- data/lib/rubygems/request_set.rb +2 -2
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/resolver/installer_set.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/security.rb +4 -3
- data/lib/rubygems/security_option.rb +3 -3
- data/lib/rubygems/source.rb +3 -1
- data/lib/rubygems/spec_fetcher.rb +1 -1
- data/lib/rubygems/specification.rb +46 -46
- data/lib/rubygems/text.rb +21 -20
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +454 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +4 -1
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/util/licenses.rb +2 -0
- data/lib/rubygems/version.rb +2 -0
- data/lib/rubygems/version_option.rb +2 -2
- data/lib/rubygems.rb +13 -10
- data/rubygems-update.gemspec +1 -1
- data/setup.rb +1 -6
- data/test/rubygems/encrypted_private_key.pem +26 -26
- data/test/rubygems/helper.rb +48 -38
- data/test/rubygems/test_config.rb +2 -2
- data/test/rubygems/test_exit.rb +11 -0
- data/test/rubygems/test_gem.rb +46 -41
- data/test/rubygems/test_gem_command.rb +1 -1
- data/test/rubygems/test_gem_command_manager.rb +28 -2
- data/test/rubygems/test_gem_commands_cert_command.rb +8 -8
- data/test/rubygems/test_gem_commands_fetch_command.rb +36 -0
- data/test/rubygems/test_gem_commands_open_command.rb +1 -1
- data/test/rubygems/test_gem_commands_server_command.rb +4 -46
- data/test/rubygems/test_gem_commands_setup_command.rb +67 -19
- data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
- data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
- data/test/rubygems/test_gem_commands_update_command.rb +2 -2
- data/test/rubygems/test_gem_commands_yank_command.rb +1 -1
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +7 -3
- data/test/rubygems/test_gem_install_update_options.rb +2 -2
- data/test/rubygems/test_gem_installer.rb +37 -5
- data/test/rubygems/test_gem_path_support.rb +2 -6
- data/test/rubygems/test_gem_remote_fetcher.rb +15 -0
- data/test/rubygems/test_gem_request.rb +10 -4
- data/test/rubygems/test_gem_requirement.rb +0 -1
- data/test/rubygems/test_gem_resolver.rb +7 -7
- data/test/rubygems/test_gem_security.rb +1 -1
- data/test/rubygems/test_gem_specification.rb +27 -25
- data/test/rubygems/test_gem_text.rb +6 -0
- data/test/rubygems/test_project_sanity.rb +1 -1
- data/test/rubygems/test_require.rb +8 -35
- data/test/rubygems/test_rubygems.rb +23 -0
- metadata +31 -8
- data/bundler/lib/bundler/gemdeps.rb +0 -29
- data/lib/rubygems/server.rb +0 -882
- data/test/rubygems/bogussources.rb +0 -9
- data/test/rubygems/test_gem_server.rb +0 -608
@@ -1,30 +1,30 @@
|
|
1
1
|
-----BEGIN RSA PRIVATE KEY-----
|
2
2
|
Proc-Type: 4,ENCRYPTED
|
3
|
-
DEK-Info:
|
3
|
+
DEK-Info: AES-256-CBC,CB6FD0B173EF450C6EE21A01DD785C1D
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
5
|
+
KqHn2Df8hSuwNE+W+60MnGtc6xpoXmF3iN25iVwcN67krYn+N6cBhjFeXwXccYwJ
|
6
|
+
2gHSu4iEK9Qe32vK0yuv8N9h/fmsabZl0TotnEem/pqO5T8W4LxyK+Rw0s6RB30S
|
7
|
+
C+mUisRADTanAxyBxsNU8xR8OAUNMAAxV1me6It0W2lfNE3t5jg/Kr0NWMoRUNRx
|
8
|
+
dkE6WlD5D8jBeC3QdZ6OuE7QXOCEAWAjcFMc0d1WJq2t2r3TrLVfTH7EOoRyvL1H
|
9
|
+
rrFRx/dEW1UJfM6P11wB5R0nhg3rDXF7oDFszjwO/3tzARke0NZuN37l301lYRl1
|
10
|
+
aolO6sShJLa0Ml/TgNcJw0S6rc6a1Z52gTfQKztKcL1UX4HLZg75zKmn6qfatMBC
|
11
|
+
iXn+pQRYNsOPQ5h4r7lBBqvuV+gBw+rN768tYpZ2/YVDaygxETHcZAFCdAw/JNbP
|
12
|
+
d0XPIbP79NRrCgzSo58LKQGuOQf3Hh0vp1YS+MilMtm/eogoj1enSPM+ymStHRwG
|
13
|
+
i+D00xCQ6blSOZ2eUUBJXt11YzP22GYnv+XTR/5kGKkTIvoRMfd+39bQyR32IEv2
|
14
|
+
Z+yweAGQInD94eifT9ObbIayJ47y01KP0+Vj6hz4RCFsmJKsYiai5JiKlmf7lV9w
|
15
|
+
7zH3TtCOx/xSyomesXVRkqvFkdyeguU72kXc5tiMPaDXGCOeV0GWyR1GU1DUX9/K
|
16
|
+
60E7ym0Wx77WGMKk2fkirZzBdOeliyCRUXd7ccN2rBCjTwtjAUIk27lwzdUaTUv7
|
17
|
+
EmjauDvSMFtir58c+zjlLmBaSQOzKcj0KXMp0Oucls9bD85WGGbGyzGhTa0AZ+/+
|
18
|
+
cCEJt7RAwW0kTEO/uO+BAZe/zBoi9ek+QBn54FK3E7CXfS4Oi9Qbc3fwlVyTlVmz
|
19
|
+
ZGrCncO0TIVGErFWK24Z7lX8rBnk8enfnamrPfKtwn4LG9aDfhSj8DtisjlRUVT5
|
20
|
+
chDQ+CCi9rh3wXh28lyS+nXJ3yFidCzRgcsc3PpN/c4DNRggZc+C/KDw+J2FW+8Y
|
21
|
+
p65OliBQHQcG0PnCa2xRyCGevytPG0rfNDgyaY33dPEo90mBLVcwLbzGiSGBHgFl
|
22
|
+
pr8A/rqbnFpRO39NYbACeRFCqPpzyzfARCCcjcDoFrENdIaJui0fjlBkoV3B/KiK
|
23
|
+
EVjDcgwt1HAtz8bV2YJ+OpQbhD7E90e2vTRMuXAH21Ygo32VOS0LRlCRc9ZyZW4z
|
24
|
+
PTyO/6a+FbXZ1zhVJxu/0bmBERZ14WVmWq56oxQav8knpxYeYPgpEmIZnrHnJ1Ko
|
25
|
+
UoXcc8Hy4NKtaBmDcaF8TCobNsRZTxO/htqpdyNsOrBSsnX2kP5D/O1l1vuVYi1/
|
26
|
+
RYfUqL9dvGzvfsFuuDDjDlQ/fIA6pFzJV3fy4KJHlF1r33qaE/lNMdpKljBwvUII
|
27
|
+
Vog4cGmzxssqK5q9kuogcuyeOuFODjBNW4qt0WylSi9bwwy3ZwaZLRqhngz6+tCV
|
28
|
+
Jp45Gk881XiVe3aVU0l+4DmJJ9/5vwqjH5Vo/GJqFU6gzB+Zv/0plYeNkuE0Xo2z
|
29
|
+
ecdxnGKVPl42q44lvczjDw2KX0ahxQrfrbcl48//zR295u9POzCL97d6zpioI2NR
|
30
30
|
-----END RSA PRIVATE KEY-----
|
data/test/rubygems/helper.rb
CHANGED
@@ -16,16 +16,6 @@ begin
|
|
16
16
|
rescue Gem::LoadError
|
17
17
|
end
|
18
18
|
|
19
|
-
begin
|
20
|
-
require 'simplecov'
|
21
|
-
SimpleCov.start do
|
22
|
-
add_filter "/test/"
|
23
|
-
add_filter "/bundler/"
|
24
|
-
add_filter "/lib/rubygems/resolver/molinillo"
|
25
|
-
end
|
26
|
-
rescue LoadError
|
27
|
-
end
|
28
|
-
|
29
19
|
if File.exist?(bundler_gemspec)
|
30
20
|
require_relative '../../bundler/lib/bundler'
|
31
21
|
else
|
@@ -153,15 +143,13 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
153
143
|
|
154
144
|
return captured_stdout.read, captured_stderr.read
|
155
145
|
ensure
|
156
|
-
captured_stdout.unlink
|
157
|
-
captured_stderr.unlink
|
158
146
|
$stdout.reopen orig_stdout
|
159
147
|
$stderr.reopen orig_stderr
|
160
148
|
|
161
149
|
orig_stdout.close
|
162
150
|
orig_stderr.close
|
163
|
-
captured_stdout.close
|
164
|
-
captured_stderr.close
|
151
|
+
captured_stdout.close!
|
152
|
+
captured_stderr.close!
|
165
153
|
end
|
166
154
|
end
|
167
155
|
end
|
@@ -257,16 +245,14 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
257
245
|
output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
|
258
246
|
end
|
259
247
|
|
260
|
-
def
|
261
|
-
|
248
|
+
def parse_make_command_line_targets(line)
|
249
|
+
args = line.sub(/^#{Regexp.escape make_command}/, "").shellsplit
|
262
250
|
|
263
251
|
targets = []
|
264
|
-
macros = {}
|
265
252
|
|
266
253
|
args.each do |arg|
|
267
254
|
case arg
|
268
255
|
when /\A(\w+)=/
|
269
|
-
macros[$1] = $'
|
270
256
|
else
|
271
257
|
targets << arg
|
272
258
|
end
|
@@ -274,11 +260,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
274
260
|
|
275
261
|
targets << '' if targets.empty?
|
276
262
|
|
277
|
-
|
278
|
-
:command => command,
|
279
|
-
:targets => targets,
|
280
|
-
:macros => macros,
|
281
|
-
}
|
263
|
+
targets
|
282
264
|
end
|
283
265
|
|
284
266
|
def assert_contains_make_command(target, output, msg = nil)
|
@@ -291,7 +273,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
291
273
|
)
|
292
274
|
else
|
293
275
|
msg = build_message(msg,
|
294
|
-
'Expected make command "%s"
|
276
|
+
'Expected make command "%s", but was "%s"' % [
|
295
277
|
('%s %s' % [make_command, target]).rstrip,
|
296
278
|
output,
|
297
279
|
]
|
@@ -299,10 +281,9 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
299
281
|
end
|
300
282
|
|
301
283
|
assert scan_make_command_lines(output).any? {|line|
|
302
|
-
|
284
|
+
targets = parse_make_command_line_targets(line)
|
303
285
|
|
304
|
-
if
|
305
|
-
yield make, line if block_given?
|
286
|
+
if targets.include?(target)
|
306
287
|
true
|
307
288
|
else
|
308
289
|
false
|
@@ -409,6 +390,14 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
409
390
|
@orig_bindir = RbConfig::CONFIG["bindir"]
|
410
391
|
RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
|
411
392
|
|
393
|
+
@orig_sitelibdir = RbConfig::CONFIG["sitelibdir"]
|
394
|
+
new_sitelibdir = @orig_sitelibdir.sub(RbConfig::CONFIG["prefix"], @gemhome)
|
395
|
+
$LOAD_PATH.insert(Gem.load_path_insert_index, new_sitelibdir)
|
396
|
+
RbConfig::CONFIG["sitelibdir"] = new_sitelibdir
|
397
|
+
|
398
|
+
@orig_mandir = RbConfig::CONFIG["mandir"]
|
399
|
+
RbConfig::CONFIG["mandir"] = File.join @gemhome, "share", "man"
|
400
|
+
|
412
401
|
Gem::Specification.unresolved_deps.clear
|
413
402
|
Gem.use_paths(@gemhome)
|
414
403
|
|
@@ -480,6 +469,8 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
480
469
|
|
481
470
|
Gem.ruby = @orig_ruby if @orig_ruby
|
482
471
|
|
472
|
+
RbConfig::CONFIG['mandir'] = @orig_mandir
|
473
|
+
RbConfig::CONFIG['sitelibdir'] = @orig_sitelibdir
|
483
474
|
RbConfig::CONFIG['bindir'] = @orig_bindir
|
484
475
|
|
485
476
|
Gem.instance_variable_set :@default_specifications_dir, nil
|
@@ -489,7 +480,6 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
489
480
|
Gem.instance_variable_set :@default_dir, nil
|
490
481
|
end
|
491
482
|
|
492
|
-
Gem::Specification._clear_load_cache
|
493
483
|
Gem::Specification.unresolved_deps.clear
|
494
484
|
Gem::refresh
|
495
485
|
|
@@ -599,7 +589,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
599
589
|
def have_git?
|
600
590
|
return if in_path? @git
|
601
591
|
|
602
|
-
|
592
|
+
pend 'cannot find git executable, use GIT environment variable to set'
|
603
593
|
end
|
604
594
|
|
605
595
|
def in_path?(executable) # :nodoc:
|
@@ -1084,19 +1074,23 @@ Also, a list:
|
|
1084
1074
|
@fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip
|
1085
1075
|
@fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip
|
1086
1076
|
|
1087
|
-
|
1088
|
-
|
1089
|
-
all_specs.each do |spec|
|
1090
|
-
path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
|
1091
|
-
data = Marshal.dump spec
|
1092
|
-
data_deflate = Zlib::Deflate.deflate data
|
1093
|
-
@fetcher.data[path] = data_deflate
|
1094
|
-
end
|
1077
|
+
write_marshalled_gemspecs(*all_specs)
|
1095
1078
|
end
|
1096
1079
|
|
1097
1080
|
nil # force errors
|
1098
1081
|
end
|
1099
1082
|
|
1083
|
+
def write_marshalled_gemspecs(*all_specs)
|
1084
|
+
v = Gem.marshal_version
|
1085
|
+
|
1086
|
+
all_specs.each do |spec|
|
1087
|
+
path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
|
1088
|
+
data = Marshal.dump spec
|
1089
|
+
data_deflate = Zlib::Deflate.deflate data
|
1090
|
+
@fetcher.data[path] = data_deflate
|
1091
|
+
end
|
1092
|
+
end
|
1093
|
+
|
1100
1094
|
##
|
1101
1095
|
# Deflates +data+
|
1102
1096
|
|
@@ -1306,6 +1300,22 @@ Also, a list:
|
|
1306
1300
|
Gem.instance_variable_set :@ruby, orig_ruby
|
1307
1301
|
end
|
1308
1302
|
|
1303
|
+
def with_internal_encoding(encoding)
|
1304
|
+
int_enc = Encoding.default_internal
|
1305
|
+
silence_warnings { Encoding.default_internal = encoding }
|
1306
|
+
|
1307
|
+
yield
|
1308
|
+
ensure
|
1309
|
+
silence_warnings { Encoding.default_internal = int_enc }
|
1310
|
+
end
|
1311
|
+
|
1312
|
+
def silence_warnings
|
1313
|
+
old_verbose, $VERBOSE = $VERBOSE, false
|
1314
|
+
yield
|
1315
|
+
ensure
|
1316
|
+
$VERBOSE = old_verbose
|
1317
|
+
end
|
1318
|
+
|
1309
1319
|
class << self
|
1310
1320
|
# :nodoc:
|
1311
1321
|
##
|
@@ -1593,7 +1603,7 @@ class Object
|
|
1593
1603
|
metaclass.send :undef_method, name
|
1594
1604
|
metaclass.send :alias_method, name, new_name
|
1595
1605
|
metaclass.send :undef_method, new_name
|
1596
|
-
end
|
1606
|
+
end unless method_defined?(:stub) # lib/resolv/test_dns.rb also has the same method definition
|
1597
1607
|
end
|
1598
1608
|
|
1599
1609
|
require_relative 'utilities'
|
@@ -12,14 +12,14 @@ class TestConfig < Gem::TestCase
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_good_rake_path_is_escaped
|
15
|
-
path = Gem::TestCase.
|
15
|
+
path = Gem::TestCase.class_variable_get(:@@good_rake)
|
16
16
|
ruby, rake = path.shellsplit
|
17
17
|
assert_equal(Gem.ruby, ruby)
|
18
18
|
assert_match(/\/good_rake.rb\z/, rake)
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_bad_rake_path_is_escaped
|
22
|
-
path = Gem::TestCase.
|
22
|
+
path = Gem::TestCase.class_variable_get(:@@bad_rake)
|
23
23
|
ruby, rake = path.shellsplit
|
24
24
|
assert_equal(Gem.ruby, ruby)
|
25
25
|
assert_match(/\/bad_rake.rb\z/, rake)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'helper'
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
class TestExit < Gem::TestCase
|
7
|
+
def test_exit
|
8
|
+
system(*ruby_with_rubygems_in_load_path, "-e", "raise Gem::SystemExitException.new(2)")
|
9
|
+
assert_equal 2, $?.exitstatus
|
10
|
+
end
|
11
|
+
end
|
data/test/rubygems/test_gem.rb
CHANGED
@@ -888,6 +888,27 @@ class TestGem < Gem::TestCase
|
|
888
888
|
assert_equal gems['a-2'], spec
|
889
889
|
end
|
890
890
|
|
891
|
+
def test_self_latest_spec_for_multiple_sources
|
892
|
+
uri = 'https://example.sample.com/'
|
893
|
+
source = Gem::Source.new(uri)
|
894
|
+
source_list = Gem::SourceList.new
|
895
|
+
source_list << Gem::Source.new(@uri)
|
896
|
+
source_list << source
|
897
|
+
Gem.sources.replace source_list
|
898
|
+
|
899
|
+
spec_fetcher(uri) do |fetcher|
|
900
|
+
fetcher.spec 'a', 1.1
|
901
|
+
end
|
902
|
+
|
903
|
+
gems = spec_fetcher do |fetcher|
|
904
|
+
fetcher.spec 'a', 1
|
905
|
+
fetcher.spec 'a', '3.a'
|
906
|
+
fetcher.spec 'a', 2
|
907
|
+
end
|
908
|
+
spec = Gem.latest_spec_for 'a'
|
909
|
+
assert_equal gems['a-2'], spec
|
910
|
+
end
|
911
|
+
|
891
912
|
def test_self_latest_rubygems_version
|
892
913
|
spec_fetcher do |fetcher|
|
893
914
|
fetcher.spec 'rubygems-update', '1.8.23'
|
@@ -912,6 +933,29 @@ class TestGem < Gem::TestCase
|
|
912
933
|
assert_equal Gem::Version.new(2), version
|
913
934
|
end
|
914
935
|
|
936
|
+
def test_self_latest_version_for_multiple_sources
|
937
|
+
uri = 'https://example.sample.com/'
|
938
|
+
source = Gem::Source.new(uri)
|
939
|
+
source_list = Gem::SourceList.new
|
940
|
+
source_list << Gem::Source.new(@uri)
|
941
|
+
source_list << source
|
942
|
+
Gem.sources.replace source_list
|
943
|
+
|
944
|
+
spec_fetcher(uri) do |fetcher|
|
945
|
+
fetcher.spec 'a', 1.1
|
946
|
+
end
|
947
|
+
|
948
|
+
spec_fetcher do |fetcher|
|
949
|
+
fetcher.spec 'a', 1
|
950
|
+
fetcher.spec 'a', 2
|
951
|
+
fetcher.spec 'a', '3.a'
|
952
|
+
end
|
953
|
+
|
954
|
+
version = Gem.latest_version_for 'a'
|
955
|
+
|
956
|
+
assert_equal Gem::Version.new(2), version
|
957
|
+
end
|
958
|
+
|
915
959
|
def test_self_loaded_specs
|
916
960
|
foo = util_spec 'foo'
|
917
961
|
install_gem foo
|
@@ -921,56 +965,17 @@ class TestGem < Gem::TestCase
|
|
921
965
|
assert_equal true, Gem.loaded_specs.keys.include?('foo')
|
922
966
|
end
|
923
967
|
|
924
|
-
def util_path
|
925
|
-
ENV.delete "GEM_HOME"
|
926
|
-
ENV.delete "GEM_PATH"
|
927
|
-
end
|
928
|
-
|
929
968
|
def test_self_path
|
930
969
|
assert_equal [Gem.dir], Gem.path
|
931
970
|
end
|
932
971
|
|
933
972
|
def test_self_path_default
|
934
|
-
|
935
|
-
|
936
|
-
if defined?(APPLE_GEM_HOME)
|
937
|
-
orig_APPLE_GEM_HOME = APPLE_GEM_HOME
|
938
|
-
Object.send :remove_const, :APPLE_GEM_HOME
|
939
|
-
end
|
973
|
+
ENV.delete "GEM_HOME"
|
974
|
+
ENV.delete "GEM_PATH"
|
940
975
|
|
941
976
|
Gem.instance_variable_set :@paths, nil
|
942
977
|
|
943
978
|
assert_equal [Gem.default_path, Gem.dir].flatten.uniq, Gem.path
|
944
|
-
ensure
|
945
|
-
Object.const_set :APPLE_GEM_HOME, orig_APPLE_GEM_HOME if orig_APPLE_GEM_HOME
|
946
|
-
end
|
947
|
-
|
948
|
-
unless win_platform?
|
949
|
-
def test_self_path_APPLE_GEM_HOME
|
950
|
-
util_path
|
951
|
-
|
952
|
-
Gem.clear_paths
|
953
|
-
apple_gem_home = File.join @tempdir, 'apple_gem_home'
|
954
|
-
|
955
|
-
old, $-w = $-w, nil
|
956
|
-
Object.const_set :APPLE_GEM_HOME, apple_gem_home
|
957
|
-
$-w = old
|
958
|
-
|
959
|
-
assert_includes Gem.path, apple_gem_home
|
960
|
-
ensure
|
961
|
-
Object.send :remove_const, :APPLE_GEM_HOME
|
962
|
-
end
|
963
|
-
|
964
|
-
def test_self_path_APPLE_GEM_HOME_GEM_PATH
|
965
|
-
Gem.clear_paths
|
966
|
-
ENV['GEM_PATH'] = @gemhome
|
967
|
-
apple_gem_home = File.join @tempdir, 'apple_gem_home'
|
968
|
-
Gem.const_set :APPLE_GEM_HOME, apple_gem_home
|
969
|
-
|
970
|
-
refute Gem.path.include?(apple_gem_home)
|
971
|
-
ensure
|
972
|
-
Gem.send :remove_const, :APPLE_GEM_HOME
|
973
|
-
end
|
974
979
|
end
|
975
980
|
|
976
981
|
def test_self_path_ENV_PATH
|
@@ -36,6 +36,18 @@ class TestGemCommandManager < Gem::TestCase
|
|
36
36
|
assert_kind_of Gem::Commands::InstallCommand, command
|
37
37
|
end
|
38
38
|
|
39
|
+
def test_find_login_alias_command
|
40
|
+
command = @command_manager.find_command 'login'
|
41
|
+
|
42
|
+
assert_kind_of Gem::Commands::SigninCommand, command
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_find_logout_alias_comamnd
|
46
|
+
command = @command_manager.find_command 'logout'
|
47
|
+
|
48
|
+
assert_kind_of Gem::Commands::SignoutCommand, command
|
49
|
+
end
|
50
|
+
|
39
51
|
def test_find_command_ambiguous_exact
|
40
52
|
ins_command = Class.new
|
41
53
|
Gem::Commands.send :const_set, :InsCommand, ins_command
|
@@ -50,13 +62,27 @@ class TestGemCommandManager < Gem::TestCase
|
|
50
62
|
end
|
51
63
|
|
52
64
|
def test_find_command_unknown
|
53
|
-
e = assert_raise Gem::
|
65
|
+
e = assert_raise Gem::UnknownCommandError do
|
54
66
|
@command_manager.find_command 'xyz'
|
55
67
|
end
|
56
68
|
|
57
69
|
assert_equal 'Unknown command xyz', e.message
|
58
70
|
end
|
59
71
|
|
72
|
+
def test_find_command_unknown_suggestions
|
73
|
+
e = assert_raise Gem::UnknownCommandError do
|
74
|
+
@command_manager.find_command 'pish'
|
75
|
+
end
|
76
|
+
|
77
|
+
message = 'Unknown command pish'.dup
|
78
|
+
|
79
|
+
if RUBY_VERSION >= "2.4" && defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
|
80
|
+
message << "\nDid you mean? \"push\""
|
81
|
+
end
|
82
|
+
|
83
|
+
assert_equal message, e.message
|
84
|
+
end
|
85
|
+
|
60
86
|
def test_run_interrupt
|
61
87
|
old_load_path = $:.dup
|
62
88
|
$: << File.expand_path("test/rubygems", PROJECT_DIR)
|
@@ -265,7 +291,7 @@ class TestGemCommandManager < Gem::TestCase
|
|
265
291
|
|
266
292
|
#check defaults
|
267
293
|
@command_manager.process_args %w[update]
|
268
|
-
assert_includes check_options[:document], '
|
294
|
+
assert_includes check_options[:document], 'ri'
|
269
295
|
|
270
296
|
#check settings
|
271
297
|
check_options = nil
|
@@ -745,7 +745,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
|
|
745
745
|
|
746
746
|
def test_handle_options_add_bad
|
747
747
|
nonexistent = File.join @tempdir, 'nonexistent'
|
748
|
-
e = assert_raise OptionParser::InvalidArgument do
|
748
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
749
749
|
@cmd.handle_options %W[--add #{nonexistent}]
|
750
750
|
end
|
751
751
|
|
@@ -755,7 +755,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
|
|
755
755
|
bad = File.join @tempdir, 'bad'
|
756
756
|
FileUtils.touch bad
|
757
757
|
|
758
|
-
e = assert_raise OptionParser::InvalidArgument do
|
758
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
759
759
|
@cmd.handle_options %W[--add #{bad}]
|
760
760
|
end
|
761
761
|
|
@@ -765,7 +765,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
|
|
765
765
|
|
766
766
|
def test_handle_options_certificate
|
767
767
|
nonexistent = File.join @tempdir, 'nonexistent'
|
768
|
-
e = assert_raise OptionParser::InvalidArgument do
|
768
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
769
769
|
@cmd.handle_options %W[--certificate #{nonexistent}]
|
770
770
|
end
|
771
771
|
|
@@ -775,7 +775,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
|
|
775
775
|
bad = File.join @tempdir, 'bad'
|
776
776
|
FileUtils.touch bad
|
777
777
|
|
778
|
-
e = assert_raise OptionParser::InvalidArgument do
|
778
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
779
779
|
@cmd.handle_options %W[--certificate #{bad}]
|
780
780
|
end
|
781
781
|
|
@@ -786,7 +786,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
|
|
786
786
|
|
787
787
|
def test_handle_options_key_bad
|
788
788
|
nonexistent = File.join @tempdir, 'nonexistent'
|
789
|
-
e = assert_raise OptionParser::InvalidArgument do
|
789
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
790
790
|
@cmd.handle_options %W[--private-key #{nonexistent}]
|
791
791
|
end
|
792
792
|
|
@@ -797,14 +797,14 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
|
|
797
797
|
bad = File.join @tempdir, 'bad'
|
798
798
|
FileUtils.touch bad
|
799
799
|
|
800
|
-
e = assert_raise OptionParser::InvalidArgument do
|
800
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
801
801
|
@cmd.handle_options %W[--private-key #{bad}]
|
802
802
|
end
|
803
803
|
|
804
804
|
assert_equal "invalid argument: --private-key #{bad}: invalid RSA, DSA, or EC key",
|
805
805
|
e.message
|
806
806
|
|
807
|
-
e = assert_raise OptionParser::InvalidArgument do
|
807
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
808
808
|
@cmd.handle_options %W[--private-key #{PUBLIC_KEY_FILE}]
|
809
809
|
end
|
810
810
|
|
@@ -851,7 +851,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
|
|
851
851
|
|
852
852
|
def test_handle_options_sign_nonexistent
|
853
853
|
nonexistent = File.join @tempdir, 'nonexistent'
|
854
|
-
e = assert_raise OptionParser::InvalidArgument do
|
854
|
+
e = assert_raise Gem::OptionParser::InvalidArgument do
|
855
855
|
@cmd.handle_options %W[
|
856
856
|
--private-key #{ALTERNATE_KEY_FILE}
|
857
857
|
|
@@ -79,6 +79,42 @@ class TestGemCommandsFetchCommand < Gem::TestCase
|
|
79
79
|
"#{a2.full_name} not fetched")
|
80
80
|
end
|
81
81
|
|
82
|
+
def test_execute_platform
|
83
|
+
a2_spec, a2 = util_gem("a", "2")
|
84
|
+
|
85
|
+
a2_universal_darwin_spec, a2_universal_darwin = util_gem("a", "2") do |s|
|
86
|
+
s.platform = 'universal-darwin'
|
87
|
+
end
|
88
|
+
|
89
|
+
Gem::RemoteFetcher.fetcher = @fetcher = Gem::FakeFetcher.new
|
90
|
+
|
91
|
+
write_marshalled_gemspecs(a2_spec, a2_universal_darwin_spec)
|
92
|
+
|
93
|
+
@cmd.options[:args] = %w[a]
|
94
|
+
|
95
|
+
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = util_gzip(Marshal.dump([
|
96
|
+
Gem::NameTuple.new(a2_spec.name, a2_spec.version, a2_spec.platform),
|
97
|
+
Gem::NameTuple.new(a2_universal_darwin_spec.name, a2_universal_darwin_spec.version, a2_universal_darwin_spec.platform),
|
98
|
+
]))
|
99
|
+
|
100
|
+
@fetcher.data["#{@gem_repo}gems/#{a2_spec.file_name}"] = Gem.read_binary(a2)
|
101
|
+
FileUtils.cp a2, a2_spec.cache_file
|
102
|
+
|
103
|
+
@fetcher.data["#{@gem_repo}gems/#{a2_universal_darwin_spec.file_name}"] = Gem.read_binary(a2_universal_darwin)
|
104
|
+
FileUtils.cp a2_universal_darwin, a2_universal_darwin_spec.cache_file
|
105
|
+
|
106
|
+
util_set_arch 'arm64-darwin20' do
|
107
|
+
use_ui @ui do
|
108
|
+
Dir.chdir @tempdir do
|
109
|
+
@cmd.execute
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
assert_path_exist(File.join(@tempdir, a2_universal_darwin_spec.file_name),
|
115
|
+
"#{a2_universal_darwin_spec.full_name} not fetched")
|
116
|
+
end
|
117
|
+
|
82
118
|
def test_execute_specific_prerelease
|
83
119
|
specs = spec_fetcher do |fetcher|
|
84
120
|
fetcher.gem 'a', 2
|
@@ -21,7 +21,7 @@ class TestGemCommandsOpenCommand < Gem::TestCase
|
|
21
21
|
|
22
22
|
def test_execute
|
23
23
|
@cmd.options[:args] = %w[foo]
|
24
|
-
@cmd.options[:editor] = "#{
|
24
|
+
@cmd.options[:editor] = "#{ruby_with_rubygems_in_load_path} -eexit --"
|
25
25
|
|
26
26
|
gem 'foo', '1.0.0'
|
27
27
|
spec = gem 'foo', '1.0.1'
|
@@ -9,53 +9,11 @@ class TestGemCommandsServerCommand < Gem::TestCase
|
|
9
9
|
@cmd = Gem::Commands::ServerCommand.new
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
@
|
14
|
-
|
15
|
-
assert_equal false, @cmd.options[:daemon]
|
16
|
-
assert_equal [], @cmd.options[:gemdir]
|
17
|
-
assert_equal 8808, @cmd.options[:port]
|
18
|
-
|
19
|
-
@cmd.send :handle_options, %w[-p 9999 -d /nonexistent --daemon]
|
20
|
-
|
21
|
-
assert_equal true, @cmd.options[:daemon]
|
22
|
-
assert_equal [File.expand_path('/nonexistent')], @cmd.options[:gemdir]
|
23
|
-
assert_equal 9999, @cmd.options[:port]
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_handle_options_gemdir
|
27
|
-
@cmd.send :handle_options, %w[--dir a --dir b]
|
28
|
-
|
29
|
-
assert_equal [File.expand_path('a'), File.expand_path('b')],
|
30
|
-
@cmd.options[:gemdir]
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_handle_options_port
|
34
|
-
@cmd.send :handle_options, %w[-p 0]
|
35
|
-
assert_equal 0, @cmd.options[:port]
|
36
|
-
|
37
|
-
@cmd.send :handle_options, %w[-p 65535]
|
38
|
-
assert_equal 65535, @cmd.options[:port]
|
39
|
-
|
40
|
-
begin
|
41
|
-
@cmd.send :handle_options, %w[-p discard]
|
42
|
-
assert_equal 9, @cmd.options[:port]
|
43
|
-
rescue OptionParser::InvalidArgument
|
44
|
-
# for container environment on GitHub Actions
|
45
|
-
end
|
46
|
-
|
47
|
-
e = assert_raise OptionParser::InvalidArgument do
|
48
|
-
@cmd.send :handle_options, %w[-p nonexistent]
|
49
|
-
end
|
50
|
-
|
51
|
-
assert_equal 'invalid argument: -p nonexistent: no such named service',
|
52
|
-
e.message
|
53
|
-
|
54
|
-
e = assert_raise OptionParser::InvalidArgument do
|
55
|
-
@cmd.send :handle_options, %w[-p 65536]
|
12
|
+
def test_execute
|
13
|
+
use_ui @ui do
|
14
|
+
@cmd.execute
|
56
15
|
end
|
57
16
|
|
58
|
-
|
59
|
-
e.message
|
17
|
+
assert_match %r{Install the rubygems-server}i, @ui.error
|
60
18
|
end
|
61
19
|
end
|