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,88 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require_relative '../command'
|
3
|
-
require_relative '../server'
|
4
|
-
require_relative '../deprecate'
|
5
3
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
OptionParser.accept :Port do |port|
|
15
|
-
if port =~ /\A\d+\z/
|
16
|
-
port = Integer port
|
17
|
-
raise OptionParser::InvalidArgument, "#{port}: not a port number" if
|
18
|
-
port > 65535
|
19
|
-
|
20
|
-
port
|
21
|
-
else
|
22
|
-
begin
|
23
|
-
Socket.getservbyname port
|
24
|
-
rescue SocketError
|
25
|
-
raise OptionParser::InvalidArgument, "#{port}: no such named service"
|
26
|
-
end
|
4
|
+
unless defined? Gem::Commands::ServerCommand
|
5
|
+
class Gem::Commands::ServerCommand < Gem::Command
|
6
|
+
def initialize
|
7
|
+
super('server', 'Starts up a web server that hosts the RDoc (requires rubygems-server)')
|
8
|
+
begin
|
9
|
+
Gem::Specification.find_by_name('rubygems-server').activate
|
10
|
+
rescue Gem::LoadError
|
11
|
+
# no-op
|
27
12
|
end
|
28
13
|
end
|
29
14
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
add_option '-d', '--dir=GEMDIR',
|
36
|
-
'directories from which to serve gems',
|
37
|
-
'multiple directories may be provided' do |gemdir, options|
|
38
|
-
options[:gemdir] << File.expand_path(gemdir)
|
15
|
+
def description # :nodoc:
|
16
|
+
<<-EOF
|
17
|
+
The server command has been moved to the rubygems-server gem.
|
18
|
+
EOF
|
39
19
|
end
|
40
20
|
|
41
|
-
|
42
|
-
|
21
|
+
def execute
|
22
|
+
alert_error "Install the rubygems-server gem for the server command"
|
43
23
|
end
|
44
|
-
|
45
|
-
add_option '-b', '--bind=HOST,HOST',
|
46
|
-
'addresses to bind', Array do |address, options|
|
47
|
-
options[:addresses] ||= []
|
48
|
-
options[:addresses].push(*address)
|
49
|
-
end
|
50
|
-
|
51
|
-
add_option '-l', '--launch[=COMMAND]',
|
52
|
-
'launches a browser window',
|
53
|
-
"COMMAND defaults to 'start' on Windows",
|
54
|
-
"and 'open' on all other platforms" do |launch, options|
|
55
|
-
launch ||= Gem.win_platform? ? 'start' : 'open'
|
56
|
-
options[:launch] = launch
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def defaults_str # :nodoc:
|
61
|
-
"--port 8808 --dir #{Gem.dir} --no-daemon"
|
62
|
-
end
|
63
|
-
|
64
|
-
def description # :nodoc:
|
65
|
-
<<-EOF
|
66
|
-
The server command starts up a web server that hosts the RDoc for your
|
67
|
-
installed gems and can operate as a server for installation of gems on other
|
68
|
-
machines.
|
69
|
-
|
70
|
-
The cache files for installed gems must exist to use the server as a source
|
71
|
-
for gem installation.
|
72
|
-
|
73
|
-
To install gems from a running server, use `gem install GEMNAME --source
|
74
|
-
http://gem_server_host:8808`
|
75
|
-
|
76
|
-
You can set up a shortcut to gem server documentation using the URL:
|
77
|
-
|
78
|
-
http://localhost:8808/rdoc?q=%s - Firefox
|
79
|
-
http://localhost:8808/rdoc?q=* - LaunchBar
|
80
|
-
|
81
|
-
EOF
|
82
|
-
end
|
83
|
-
|
84
|
-
def execute
|
85
|
-
options[:gemdir] = Gem.path if options[:gemdir].empty?
|
86
|
-
Gem::Server.run options
|
87
24
|
end
|
88
25
|
end
|
@@ -12,8 +12,6 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|
12
12
|
ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
|
13
13
|
|
14
14
|
def initialize
|
15
|
-
require 'tmpdir'
|
16
|
-
|
17
15
|
super 'setup', 'Install RubyGems',
|
18
16
|
:format_executable => false, :document => %w[ri],
|
19
17
|
:force => true,
|
@@ -149,13 +147,6 @@ By default, this RubyGems will install gem as:
|
|
149
147
|
def execute
|
150
148
|
@verbose = Gem.configuration.really_verbose
|
151
149
|
|
152
|
-
install_destdir = options[:destdir]
|
153
|
-
|
154
|
-
unless install_destdir.empty?
|
155
|
-
ENV['GEM_HOME'] ||= File.join(install_destdir,
|
156
|
-
Gem.default_dir.gsub(/^[a-zA-Z]:/, ''))
|
157
|
-
end
|
158
|
-
|
159
150
|
check_ruby_version
|
160
151
|
|
161
152
|
require 'fileutils'
|
@@ -166,8 +157,8 @@ By default, this RubyGems will install gem as:
|
|
166
157
|
end
|
167
158
|
extend MakeDirs
|
168
159
|
|
169
|
-
lib_dir, bin_dir = make_destination_dirs
|
170
|
-
man_dir = generate_default_man_dir
|
160
|
+
lib_dir, bin_dir = make_destination_dirs
|
161
|
+
man_dir = generate_default_man_dir
|
171
162
|
|
172
163
|
install_lib lib_dir
|
173
164
|
|
@@ -189,8 +180,8 @@ By default, this RubyGems will install gem as:
|
|
189
180
|
|
190
181
|
say "RubyGems #{Gem::VERSION} installed"
|
191
182
|
|
192
|
-
regenerate_binstubs if options[:regenerate_binstubs]
|
193
|
-
regenerate_plugins if options[:regenerate_plugins]
|
183
|
+
regenerate_binstubs(bin_dir) if options[:regenerate_binstubs]
|
184
|
+
regenerate_plugins(bin_dir) if options[:regenerate_plugins]
|
194
185
|
|
195
186
|
uninstall_old_gemcutter
|
196
187
|
|
@@ -258,35 +249,34 @@ By default, this RubyGems will install gem as:
|
|
258
249
|
say "Installing #{tool} executable" if @verbose
|
259
250
|
|
260
251
|
Dir.chdir path do
|
261
|
-
|
252
|
+
bin_file = "gem"
|
262
253
|
|
263
|
-
|
254
|
+
require 'tmpdir'
|
264
255
|
|
265
|
-
|
266
|
-
|
267
|
-
bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
|
256
|
+
dest_file = target_bin_path(bin_dir, bin_file)
|
257
|
+
bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
|
268
258
|
|
269
|
-
|
270
|
-
|
271
|
-
|
259
|
+
begin
|
260
|
+
bin = File.readlines bin_file
|
261
|
+
bin[0] = shebang
|
272
262
|
|
273
|
-
|
274
|
-
|
275
|
-
end
|
276
|
-
|
277
|
-
install bin_tmp_file, dest_file, :mode => prog_mode
|
278
|
-
bin_file_names << dest_file
|
279
|
-
ensure
|
280
|
-
rm bin_tmp_file
|
263
|
+
File.open bin_tmp_file, 'w' do |fp|
|
264
|
+
fp.puts bin.join
|
281
265
|
end
|
282
266
|
|
283
|
-
|
267
|
+
install bin_tmp_file, dest_file, :mode => prog_mode
|
268
|
+
bin_file_names << dest_file
|
269
|
+
ensure
|
270
|
+
rm bin_tmp_file
|
271
|
+
end
|
272
|
+
|
273
|
+
next unless Gem.win_platform?
|
284
274
|
|
285
|
-
|
286
|
-
|
275
|
+
begin
|
276
|
+
bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
|
287
277
|
|
288
|
-
|
289
|
-
|
278
|
+
File.open bin_cmd_file, 'w' do |file|
|
279
|
+
file.puts <<-TEXT
|
290
280
|
@ECHO OFF
|
291
281
|
IF NOT "%~f0" == "~f0" GOTO :WinNT
|
292
282
|
@"#{File.basename(Gem.ruby).chomp('"')}" "#{dest_file}" %1 %2 %3 %4 %5 %6 %7 %8 %9
|
@@ -294,12 +284,11 @@ By default, this RubyGems will install gem as:
|
|
294
284
|
:WinNT
|
295
285
|
@"#{File.basename(Gem.ruby).chomp('"')}" "%~dpn0" %*
|
296
286
|
TEXT
|
297
|
-
end
|
298
|
-
|
299
|
-
install bin_cmd_file, "#{dest_file}.bat", :mode => prog_mode
|
300
|
-
ensure
|
301
|
-
rm bin_cmd_file
|
302
287
|
end
|
288
|
+
|
289
|
+
install bin_cmd_file, "#{dest_file}.bat", :mode => prog_mode
|
290
|
+
ensure
|
291
|
+
rm bin_cmd_file
|
303
292
|
end
|
304
293
|
end
|
305
294
|
end
|
@@ -371,8 +360,7 @@ By default, this RubyGems will install gem as:
|
|
371
360
|
end
|
372
361
|
|
373
362
|
def install_default_bundler_gem(bin_dir)
|
374
|
-
specs_dir =
|
375
|
-
specs_dir = File.join(options[:destdir], specs_dir) unless Gem.win_platform?
|
363
|
+
specs_dir = File.join(default_dir, "specifications", "default")
|
376
364
|
mkdir_p specs_dir, :mode => 0755
|
377
365
|
|
378
366
|
bundler_spec = Dir.chdir("bundler") { Gem::Specification.load("bundler.gemspec") }
|
@@ -387,8 +375,20 @@ By default, this RubyGems will install gem as:
|
|
387
375
|
|
388
376
|
bundler_spec = Gem::Specification.load(default_spec_path)
|
389
377
|
|
378
|
+
# The base_dir value for a specification is inferred by walking up from the
|
379
|
+
# folder where the spec was `loaded_from`. In the case of default gems, we
|
380
|
+
# walk up two levels, because they live at `specifications/default/`, whereas
|
381
|
+
# in the case of regular gems we walk up just one level because they live at
|
382
|
+
# `specifications/`. However, in this case, the gem we are installing is
|
383
|
+
# misdetected as a regular gem, when it's a default gem in reality. This is
|
384
|
+
# because when there's a `:destdir`, the `loaded_from` path has changed and
|
385
|
+
# doesn't match `Gem.default_specifications_dir` which is the criteria to
|
386
|
+
# tag a gem as a default gem. So, in that case, write the correct
|
387
|
+
# `@base_dir` directly.
|
388
|
+
bundler_spec.instance_variable_set(:@base_dir, File.dirname(File.dirname(specs_dir)))
|
389
|
+
|
390
390
|
# Remove gemspec that was same version of vendored bundler.
|
391
|
-
normal_gemspec = File.join(
|
391
|
+
normal_gemspec = File.join(default_dir, "specifications", "bundler-#{bundler_spec.version}.gemspec")
|
392
392
|
if File.file? normal_gemspec
|
393
393
|
File.delete normal_gemspec
|
394
394
|
end
|
@@ -401,7 +401,6 @@ By default, this RubyGems will install gem as:
|
|
401
401
|
end
|
402
402
|
|
403
403
|
bundler_bin_dir = bundler_spec.bin_dir
|
404
|
-
bundler_bin_dir = File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform?
|
405
404
|
mkdir_p bundler_bin_dir, :mode => 0755
|
406
405
|
bundler_spec.executables.each do |e|
|
407
406
|
cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e)
|
@@ -412,8 +411,16 @@ By default, this RubyGems will install gem as:
|
|
412
411
|
Dir.chdir("bundler") do
|
413
412
|
built_gem = Gem::Package.build(bundler_spec)
|
414
413
|
begin
|
415
|
-
|
416
|
-
|
414
|
+
Gem::Installer.at(
|
415
|
+
built_gem,
|
416
|
+
env_shebang: options[:env_shebang],
|
417
|
+
format_executable: options[:format_executable],
|
418
|
+
force: options[:force],
|
419
|
+
install_as_default: true,
|
420
|
+
bin_dir: bin_dir,
|
421
|
+
install_dir: default_dir,
|
422
|
+
wrappers: true
|
423
|
+
).install
|
417
424
|
ensure
|
418
425
|
FileUtils.rm_f built_gem
|
419
426
|
end
|
@@ -424,11 +431,11 @@ By default, this RubyGems will install gem as:
|
|
424
431
|
say "Bundler #{bundler_spec.version} installed"
|
425
432
|
end
|
426
433
|
|
427
|
-
def make_destination_dirs
|
434
|
+
def make_destination_dirs
|
428
435
|
lib_dir, bin_dir = Gem.default_rubygems_dirs
|
429
436
|
|
430
437
|
unless lib_dir
|
431
|
-
lib_dir, bin_dir = generate_default_dirs
|
438
|
+
lib_dir, bin_dir = generate_default_dirs
|
432
439
|
end
|
433
440
|
|
434
441
|
mkdir_p lib_dir, :mode => 0755
|
@@ -437,7 +444,7 @@ By default, this RubyGems will install gem as:
|
|
437
444
|
return lib_dir, bin_dir
|
438
445
|
end
|
439
446
|
|
440
|
-
def generate_default_man_dir
|
447
|
+
def generate_default_man_dir
|
441
448
|
prefix = options[:prefix]
|
442
449
|
|
443
450
|
if prefix.empty?
|
@@ -447,14 +454,10 @@ By default, this RubyGems will install gem as:
|
|
447
454
|
man_dir = File.join prefix, 'man'
|
448
455
|
end
|
449
456
|
|
450
|
-
|
451
|
-
man_dir = File.join install_destdir, man_dir.gsub(/^[a-zA-Z]:/, '')
|
452
|
-
end
|
453
|
-
|
454
|
-
man_dir
|
457
|
+
prepend_destdir_if_present(man_dir)
|
455
458
|
end
|
456
459
|
|
457
|
-
def generate_default_dirs
|
460
|
+
def generate_default_dirs
|
458
461
|
prefix = options[:prefix]
|
459
462
|
site_or_vendor = options[:site_or_vendor]
|
460
463
|
|
@@ -462,28 +465,11 @@ By default, this RubyGems will install gem as:
|
|
462
465
|
lib_dir = RbConfig::CONFIG[site_or_vendor]
|
463
466
|
bin_dir = RbConfig::CONFIG['bindir']
|
464
467
|
else
|
465
|
-
|
466
|
-
|
467
|
-
# sitelibdir/vendorlibdir.
|
468
|
-
if defined?(APPLE_GEM_HOME) and
|
469
|
-
# just in case Apple and RubyGems don't get this patched up proper.
|
470
|
-
(prefix == RbConfig::CONFIG['libdir'] or
|
471
|
-
# this one is important
|
472
|
-
prefix == File.join(RbConfig::CONFIG['libdir'], 'ruby'))
|
473
|
-
lib_dir = RbConfig::CONFIG[site_or_vendor]
|
474
|
-
bin_dir = RbConfig::CONFIG['bindir']
|
475
|
-
else
|
476
|
-
lib_dir = File.join prefix, 'lib'
|
477
|
-
bin_dir = File.join prefix, 'bin'
|
478
|
-
end
|
468
|
+
lib_dir = File.join prefix, 'lib'
|
469
|
+
bin_dir = File.join prefix, 'bin'
|
479
470
|
end
|
480
471
|
|
481
|
-
|
482
|
-
lib_dir = File.join install_destdir, lib_dir.gsub(/^[a-zA-Z]:/, '')
|
483
|
-
bin_dir = File.join install_destdir, bin_dir.gsub(/^[a-zA-Z]:/, '')
|
484
|
-
end
|
485
|
-
|
486
|
-
[lib_dir, bin_dir]
|
472
|
+
[prepend_destdir_if_present(lib_dir), prepend_destdir_if_present(bin_dir)]
|
487
473
|
end
|
488
474
|
|
489
475
|
def files_in(dir)
|
@@ -604,11 +590,12 @@ abort "#{deprecation_message}"
|
|
604
590
|
rescue Gem::InstallError
|
605
591
|
end
|
606
592
|
|
607
|
-
def regenerate_binstubs
|
593
|
+
def regenerate_binstubs(bindir)
|
608
594
|
require_relative "pristine_command"
|
609
595
|
say "Regenerating binstubs"
|
610
596
|
|
611
597
|
args = %w[--all --only-executables --silent]
|
598
|
+
args << "--bindir=#{bindir}"
|
612
599
|
if options[:env_shebang]
|
613
600
|
args << "--env-shebang"
|
614
601
|
end
|
@@ -617,11 +604,13 @@ abort "#{deprecation_message}"
|
|
617
604
|
command.invoke(*args)
|
618
605
|
end
|
619
606
|
|
620
|
-
def regenerate_plugins
|
607
|
+
def regenerate_plugins(bindir)
|
621
608
|
require_relative "pristine_command"
|
622
609
|
say "Regenerating plugins"
|
623
610
|
|
624
611
|
args = %w[--all --only-plugins --silent]
|
612
|
+
args << "--bindir=#{bindir}"
|
613
|
+
args << "--install-dir=#{default_dir}"
|
625
614
|
|
626
615
|
command = Gem::Commands::PristineCommand.new
|
627
616
|
command.invoke(*args)
|
@@ -629,6 +618,25 @@ abort "#{deprecation_message}"
|
|
629
618
|
|
630
619
|
private
|
631
620
|
|
621
|
+
def default_dir
|
622
|
+
prefix = options[:prefix]
|
623
|
+
|
624
|
+
if prefix.empty?
|
625
|
+
dir = Gem.default_dir
|
626
|
+
else
|
627
|
+
dir = prefix
|
628
|
+
end
|
629
|
+
|
630
|
+
prepend_destdir_if_present(dir)
|
631
|
+
end
|
632
|
+
|
633
|
+
def prepend_destdir_if_present(path)
|
634
|
+
destdir = options[:destdir]
|
635
|
+
return path if destdir.empty?
|
636
|
+
|
637
|
+
File.join(options[:destdir], path.gsub(/^[a-zA-Z]:/, ''))
|
638
|
+
end
|
639
|
+
|
632
640
|
def install_file_list(files, dest_dir)
|
633
641
|
files.each do |file|
|
634
642
|
install_file file, dest_dir
|
@@ -81,7 +81,7 @@ class Gem::Commands::UninstallCommand < Gem::Command
|
|
81
81
|
'Uninstall gem from the vendor directory.',
|
82
82
|
'Only for use by gem repackagers.') do |value, options|
|
83
83
|
unless Gem.vendor_dir
|
84
|
-
raise OptionParser::InvalidOption.new 'your platform is not supported'
|
84
|
+
raise Gem::OptionParser::InvalidOption.new 'your platform is not supported'
|
85
85
|
end
|
86
86
|
|
87
87
|
alert_warning 'Use your OS package manager to uninstall vendor gems'
|
@@ -19,13 +19,17 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
|
19
19
|
attr_reader :updated # :nodoc:
|
20
20
|
|
21
21
|
def initialize
|
22
|
-
|
23
|
-
:
|
24
|
-
|
22
|
+
options = {
|
23
|
+
:force => false,
|
24
|
+
}
|
25
|
+
|
26
|
+
options.merge!(install_update_options)
|
27
|
+
|
28
|
+
super 'update', 'Update installed gems to the latest version', options
|
25
29
|
|
26
30
|
add_install_update_options
|
27
31
|
|
28
|
-
OptionParser.accept Gem::Version do |value|
|
32
|
+
Gem::OptionParser.accept Gem::Version do |value|
|
29
33
|
Gem::Version.new value
|
30
34
|
|
31
35
|
value
|
@@ -51,7 +55,8 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
|
51
55
|
end
|
52
56
|
|
53
57
|
def defaults_str # :nodoc:
|
54
|
-
"--
|
58
|
+
"--no-force --install-dir #{Gem.dir}\n" +
|
59
|
+
install_update_defaults_str
|
55
60
|
end
|
56
61
|
|
57
62
|
def description # :nodoc:
|
data/lib/rubygems/defaults.rb
CHANGED
@@ -34,21 +34,7 @@ module Gem
|
|
34
34
|
# specified in the environment
|
35
35
|
|
36
36
|
def self.default_dir
|
37
|
-
|
38
|
-
[
|
39
|
-
File.dirname(RbConfig::CONFIG['sitedir']),
|
40
|
-
'Gems',
|
41
|
-
RbConfig::CONFIG['ruby_version'],
|
42
|
-
]
|
43
|
-
else
|
44
|
-
[
|
45
|
-
RbConfig::CONFIG['rubylibprefix'],
|
46
|
-
'gems',
|
47
|
-
RbConfig::CONFIG['ruby_version'],
|
48
|
-
]
|
49
|
-
end
|
50
|
-
|
51
|
-
@default_dir ||= File.join(*path)
|
37
|
+
@default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version'])
|
52
38
|
end
|
53
39
|
|
54
40
|
##
|
@@ -197,11 +183,7 @@ module Gem
|
|
197
183
|
# The default directory for binaries
|
198
184
|
|
199
185
|
def self.default_bindir
|
200
|
-
|
201
|
-
'/usr/local/bin'
|
202
|
-
else # generic install
|
203
|
-
RbConfig::CONFIG['bindir']
|
204
|
-
end
|
186
|
+
RbConfig::CONFIG['bindir']
|
205
187
|
end
|
206
188
|
|
207
189
|
def self.ruby_engine
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# See LICENSE.txt for permissions.
|
6
6
|
#++
|
7
7
|
|
8
|
-
|
8
|
+
require_relative 'tsort'
|
9
9
|
require_relative 'deprecate'
|
10
10
|
|
11
11
|
##
|
@@ -20,7 +20,7 @@ class Gem::DependencyList
|
|
20
20
|
attr_reader :specs
|
21
21
|
|
22
22
|
include Enumerable
|
23
|
-
include TSort
|
23
|
+
include Gem::TSort
|
24
24
|
|
25
25
|
##
|
26
26
|
# Allows enabling/disabling use of development dependencies
|
data/lib/rubygems/deprecate.rb
CHANGED
@@ -1,23 +1,70 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
##
|
3
|
-
# Provides
|
4
|
-
#
|
3
|
+
# Provides 3 methods for declaring when something is going away.
|
4
|
+
#
|
5
|
+
# +deprecate(name, repl, year, month)+:
|
6
|
+
# Indicate something may be removed on/after a certain date.
|
7
|
+
#
|
8
|
+
# +rubygems_deprecate(name, replacement=:none)+:
|
9
|
+
# Indicate something will be removed in the next major RubyGems version,
|
10
|
+
# and (optionally) a replacement for it.
|
11
|
+
#
|
12
|
+
# +rubygems_deprecate_command+:
|
13
|
+
# Indicate a RubyGems command (in +lib/rubygems/commands/*.rb+) will be
|
14
|
+
# removed in the next RubyGems version.
|
15
|
+
#
|
16
|
+
# Also provides +skip_during+ for temporarily turning off deprecation warnings.
|
17
|
+
# This is intended to be used in the test suite, so deprecation warnings
|
18
|
+
# don't cause test failures if you need to make sure stderr is otherwise empty.
|
19
|
+
#
|
20
|
+
#
|
21
|
+
# Example usage of +deprecate+ and +rubygems_deprecate+:
|
5
22
|
#
|
6
23
|
# class Legacy
|
7
|
-
# def self.
|
24
|
+
# def self.some_class_method
|
8
25
|
# # ...
|
9
26
|
# end
|
10
27
|
#
|
11
|
-
# def
|
28
|
+
# def some_instance_method
|
29
|
+
# # ...
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# def some_old_method
|
12
33
|
# # ...
|
13
34
|
# end
|
14
35
|
#
|
15
36
|
# extend Gem::Deprecate
|
16
|
-
# deprecate :
|
37
|
+
# deprecate :some_instance_method, "X.z", 2011, 4
|
38
|
+
# rubygems_deprecate :some_old_method, "Modern#some_new_method"
|
17
39
|
#
|
18
40
|
# class << self
|
19
41
|
# extend Gem::Deprecate
|
20
|
-
# deprecate :
|
42
|
+
# deprecate :some_class_method, :none, 2011, 4
|
43
|
+
# end
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
#
|
47
|
+
# Example usage of +rubygems_deprecate_command+:
|
48
|
+
#
|
49
|
+
# class Gem::Commands::QueryCommand < Gem::Command
|
50
|
+
# extend Gem::Deprecate
|
51
|
+
# rubygems_deprecate_command
|
52
|
+
#
|
53
|
+
# # ...
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
#
|
57
|
+
# Example usage of +skip_during+:
|
58
|
+
#
|
59
|
+
# class TestSomething < Gem::Testcase
|
60
|
+
# def test_some_thing_with_deprecations
|
61
|
+
# Gem::Deprecate.skip_during do
|
62
|
+
# actual_stdout, actual_stderr = capture_output do
|
63
|
+
# Gem.something_deprecated
|
64
|
+
# end
|
65
|
+
# assert_empty actual_stdout
|
66
|
+
# assert_equal(expected, actual_stderr)
|
67
|
+
# end
|
21
68
|
# end
|
22
69
|
# end
|
23
70
|
|
data/lib/rubygems/exceptions.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'deprecate'
|
4
|
+
require_relative 'unknown_command_spell_checker'
|
4
5
|
|
5
6
|
##
|
6
7
|
# Base exception class for RubyGems. All exception raised by RubyGems are a
|
@@ -9,6 +10,30 @@ class Gem::Exception < RuntimeError; end
|
|
9
10
|
|
10
11
|
class Gem::CommandLineError < Gem::Exception; end
|
11
12
|
|
13
|
+
class Gem::UnknownCommandError < Gem::Exception
|
14
|
+
attr_reader :unknown_command
|
15
|
+
|
16
|
+
def initialize(unknown_command)
|
17
|
+
self.class.attach_correctable
|
18
|
+
|
19
|
+
@unknown_command = unknown_command
|
20
|
+
super("Unknown command #{unknown_command}")
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.attach_correctable
|
24
|
+
return if defined?(@attached)
|
25
|
+
|
26
|
+
if defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
|
27
|
+
DidYouMean::SPELL_CHECKERS['Gem::UnknownCommandError'] =
|
28
|
+
Gem::UnknownCommandSpellChecker
|
29
|
+
|
30
|
+
prepend DidYouMean::Correctable
|
31
|
+
end
|
32
|
+
|
33
|
+
@attached = true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
12
37
|
class Gem::DependencyError < Gem::Exception; end
|
13
38
|
|
14
39
|
class Gem::DependencyRemovalException < Gem::Exception; end
|
@@ -200,7 +225,7 @@ class Gem::SystemExitException < SystemExit
|
|
200
225
|
def initialize(exit_code)
|
201
226
|
@exit_code = exit_code
|
202
227
|
|
203
|
-
super "Exiting RubyGems with exit_code #{exit_code}"
|
228
|
+
super exit_code, "Exiting RubyGems with exit_code #{exit_code}"
|
204
229
|
end
|
205
230
|
end
|
206
231
|
|
@@ -259,3 +284,4 @@ end
|
|
259
284
|
# Backwards compatible typo'd exception class for early RubyGems 2.0.x
|
260
285
|
|
261
286
|
Gem::UnsatisfiableDepedencyError = Gem::UnsatisfiableDependencyError # :nodoc:
|
287
|
+
Gem.deprecate_constant :UnsatisfiableDepedencyError
|
data/lib/rubygems/ext/builder.rb
CHANGED
@@ -24,13 +24,14 @@ class Gem::Ext::Builder
|
|
24
24
|
|
25
25
|
# try to find make program from Ruby configure arguments first
|
26
26
|
RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/
|
27
|
-
|
28
|
-
unless
|
29
|
-
|
27
|
+
make_program_name = ENV['MAKE'] || ENV['make'] || $1
|
28
|
+
unless make_program_name
|
29
|
+
make_program_name = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
|
30
30
|
end
|
31
|
-
make_program = Shellwords.split(
|
31
|
+
make_program = Shellwords.split(make_program_name)
|
32
32
|
|
33
|
-
|
33
|
+
# The installation of the bundled gems is failed when DESTDIR is empty in mswin platform.
|
34
|
+
destdir = (/\bnmake/i !~ make_program_name || ENV['DESTDIR'] && ENV['DESTDIR'] != "") ? 'DESTDIR=%s' % ENV['DESTDIR'] : ''
|
34
35
|
|
35
36
|
['clean', '', 'install'].each do |target|
|
36
37
|
# Pass DESTDIR via command line to override what's in MAKEFLAGS
|
@@ -63,14 +64,16 @@ class Gem::Ext::Builder
|
|
63
64
|
require "open3"
|
64
65
|
# Set $SOURCE_DATE_EPOCH for the subprocess.
|
65
66
|
env = {'SOURCE_DATE_EPOCH' => Gem.source_date_epoch_string}
|
66
|
-
output, status =
|
67
|
+
output, status = begin
|
68
|
+
Open3.capture2e(env, *command, :chdir => dir)
|
69
|
+
rescue => error
|
70
|
+
raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
|
71
|
+
end
|
67
72
|
if verbose
|
68
73
|
puts output
|
69
74
|
else
|
70
75
|
results << output
|
71
76
|
end
|
72
|
-
rescue => error
|
73
|
-
raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
|
74
77
|
ensure
|
75
78
|
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
76
79
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative '../command'
|
3
2
|
|
4
3
|
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
5
4
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd)
|
6
5
|
unless File.exist?(File.join(cmake_dir, 'Makefile'))
|
6
|
+
require_relative '../command'
|
7
7
|
cmd = ["cmake", ".", "-DCMAKE_INSTALL_PREFIX=#{dest_path}", *Gem::Command.build_args]
|
8
8
|
|
9
9
|
run cmd, results, class_name, cmake_dir
|