rubygems-update 3.2.34 → 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 +45 -4
- data/CONTRIBUTING.md +40 -10
- data/Manifest.txt +6 -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 +27 -0
- data/bundler/exe/bundle +7 -8
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/gem.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +2 -0
- data/bundler/lib/bundler/cli.rb +5 -0
- data/bundler/lib/bundler/definition.rb +14 -2
- data/bundler/lib/bundler/dependency.rb +5 -7
- data/bundler/lib/bundler/dsl.rb +0 -27
- data/bundler/lib/bundler/endpoint_specification.rb +0 -8
- data/bundler/lib/bundler/fetcher/compact_index.rb +9 -4
- data/bundler/lib/bundler/fetcher.rb +2 -5
- 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/lockfile_parser.rb +10 -13
- data/bundler/lib/bundler/man/bundle-add.1 +9 -1
- data/bundler/lib/bundler/man/bundle-add.1.ronn +7 -1
- data/bundler/lib/bundler/man/bundle-config.1 +2 -2
- data/bundler/lib/bundler/man/bundle-config.1.ronn +3 -3
- data/bundler/lib/bundler/man/bundle-install.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1.ronn +2 -2
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
- data/bundler/lib/bundler/man/gemfile.5 +1 -1
- data/bundler/lib/bundler/man/gemfile.5.ronn +1 -1
- 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 -29
- data/bundler/lib/bundler/rubygems_ext.rb +2 -0
- data/bundler/lib/bundler/rubygems_integration.rb +11 -48
- data/bundler/lib/bundler/self_manager.rb +73 -0
- data/bundler/lib/bundler/shared_helpers.rb +2 -9
- data/bundler/lib/bundler/source/metadata.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/Rakefile.tt +10 -1
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
- 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/thor/lib/thor/actions/file_manipulation.rb +6 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +2 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +4 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +1 -19
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +4 -22
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- 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/version.rb +1 -1
- data/bundler/lib/bundler.rb +9 -3
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/command_manager.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +5 -2
- data/lib/rubygems/commands/server_command.rb +14 -77
- data/lib/rubygems/commands/setup_command.rb +4 -16
- data/lib/rubygems/commands/update_command.rb +9 -4
- data/lib/rubygems/defaults.rb +2 -20
- data/lib/rubygems/deprecate.rb +55 -8
- data/lib/rubygems/exceptions.rb +26 -1
- data/lib/rubygems/ext/builder.rb +5 -3
- data/lib/rubygems/install_update_options.rb +11 -2
- data/lib/rubygems/installer.rb +11 -1
- data/lib/rubygems/name_tuple.rb +2 -3
- 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/resolver/installer_set.rb +1 -1
- data/lib/rubygems/security.rb +4 -3
- data/lib/rubygems/source.rb +3 -1
- data/lib/rubygems/spec_fetcher.rb +1 -1
- data/lib/rubygems/specification.rb +9 -13
- data/lib/rubygems/text.rb +21 -20
- data/lib/rubygems/uninstaller.rb +4 -1
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/version.rb +2 -0
- data/lib/rubygems.rb +3 -3
- data/rubygems-update.gemspec +1 -1
- data/setup.rb +1 -6
- data/test/rubygems/helper.rb +20 -6
- 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_manager.rb +16 -27
- 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_update_command.rb +2 -2
- 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_requirement.rb +0 -1
- data/test/rubygems/test_gem_security.rb +1 -1
- data/test/rubygems/test_gem_source_git.rb +0 -5
- data/test/rubygems/test_gem_specification.rb +16 -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 +0 -7
- metadata +9 -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
@@ -7,7 +7,6 @@
|
|
7
7
|
# License::
|
8
8
|
# Bundler::URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada.
|
9
9
|
# You can redistribute it and/or modify it under the same term as Ruby.
|
10
|
-
# Revision:: $Id$
|
11
10
|
#
|
12
11
|
# See Bundler::URI for general documentation
|
13
12
|
#
|
@@ -119,6 +118,7 @@ module Bundler::URI
|
|
119
118
|
|
120
119
|
# Private method to cleanup +dn+ from using the +path+ component attribute.
|
121
120
|
def parse_dn
|
121
|
+
raise InvalidURIError, 'bad LDAP URL' unless @path
|
122
122
|
@dn = @path[1..-1]
|
123
123
|
end
|
124
124
|
private :parse_dn
|
@@ -3,7 +3,6 @@
|
|
3
3
|
# = uri/common.rb
|
4
4
|
#
|
5
5
|
# Author:: Akira Yamada <akira@ruby-lang.org>
|
6
|
-
# Revision:: $Id$
|
7
6
|
# License::
|
8
7
|
# You can redistribute it and/or modify it under the same term as Ruby.
|
9
8
|
#
|
@@ -208,21 +207,9 @@ module Bundler::URI
|
|
208
207
|
# #=> #<Bundler::URI::LDAP ldap://ldap.example.com/dc=example?user=john>
|
209
208
|
#
|
210
209
|
def parse(uri)
|
211
|
-
|
212
|
-
registry, path, opaque, query, fragment = self.split(uri)
|
213
|
-
|
214
|
-
if scheme && Bundler::URI.scheme_list.include?(scheme.upcase)
|
215
|
-
Bundler::URI.scheme_list[scheme.upcase].new(scheme, userinfo, host, port,
|
216
|
-
registry, path, opaque, query,
|
217
|
-
fragment, self)
|
218
|
-
else
|
219
|
-
Generic.new(scheme, userinfo, host, port,
|
220
|
-
registry, path, opaque, query,
|
221
|
-
fragment, self)
|
222
|
-
end
|
210
|
+
Bundler::URI.for(*self.split(uri), self)
|
223
211
|
end
|
224
212
|
|
225
|
-
|
226
213
|
#
|
227
214
|
# == Args
|
228
215
|
#
|
@@ -69,18 +69,7 @@ module Bundler::URI
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def parse(uri) # :nodoc:
|
72
|
-
|
73
|
-
registry, path, opaque, query, fragment = self.split(uri)
|
74
|
-
scheme_list = Bundler::URI.scheme_list
|
75
|
-
if scheme && scheme_list.include?(uc = scheme.upcase)
|
76
|
-
scheme_list[uc].new(scheme, userinfo, host, port,
|
77
|
-
registry, path, opaque, query,
|
78
|
-
fragment, self)
|
79
|
-
else
|
80
|
-
Generic.new(scheme, userinfo, host, port,
|
81
|
-
registry, path, opaque, query,
|
82
|
-
fragment, self)
|
83
|
-
end
|
72
|
+
Bundler::URI.for(*self.split(uri), self)
|
84
73
|
end
|
85
74
|
|
86
75
|
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
# = uri/ws.rb
|
3
|
+
#
|
4
|
+
# Author:: Matt Muller <mamuller@amazon.com>
|
5
|
+
# License:: You can redistribute it and/or modify it under the same term as Ruby.
|
6
|
+
#
|
7
|
+
# See Bundler::URI for general documentation
|
8
|
+
#
|
9
|
+
|
10
|
+
require_relative 'generic'
|
11
|
+
|
12
|
+
module Bundler::URI
|
13
|
+
|
14
|
+
#
|
15
|
+
# The syntax of WS URIs is defined in RFC6455 section 3.
|
16
|
+
#
|
17
|
+
# Note that the Ruby Bundler::URI library allows WS URLs containing usernames and
|
18
|
+
# passwords. This is not legal as per the RFC, but used to be
|
19
|
+
# supported in Internet Explorer 5 and 6, before the MS04-004 security
|
20
|
+
# update. See <URL:http://support.microsoft.com/kb/834489>.
|
21
|
+
#
|
22
|
+
class WS < Generic
|
23
|
+
# A Default port of 80 for Bundler::URI::WS.
|
24
|
+
DEFAULT_PORT = 80
|
25
|
+
|
26
|
+
# An Array of the available components for Bundler::URI::WS.
|
27
|
+
COMPONENT = %i[
|
28
|
+
scheme
|
29
|
+
userinfo host port
|
30
|
+
path
|
31
|
+
query
|
32
|
+
].freeze
|
33
|
+
|
34
|
+
#
|
35
|
+
# == Description
|
36
|
+
#
|
37
|
+
# Creates a new Bundler::URI::WS object from components, with syntax checking.
|
38
|
+
#
|
39
|
+
# The components accepted are userinfo, host, port, path, and query.
|
40
|
+
#
|
41
|
+
# The components should be provided either as an Array, or as a Hash
|
42
|
+
# with keys formed by preceding the component names with a colon.
|
43
|
+
#
|
44
|
+
# If an Array is used, the components must be passed in the
|
45
|
+
# order <code>[userinfo, host, port, path, query]</code>.
|
46
|
+
#
|
47
|
+
# Example:
|
48
|
+
#
|
49
|
+
# uri = Bundler::URI::WS.build(host: 'www.example.com', path: '/foo/bar')
|
50
|
+
#
|
51
|
+
# uri = Bundler::URI::WS.build([nil, "www.example.com", nil, "/path", "query"])
|
52
|
+
#
|
53
|
+
# Currently, if passed userinfo components this method generates
|
54
|
+
# invalid WS URIs as per RFC 1738.
|
55
|
+
#
|
56
|
+
def self.build(args)
|
57
|
+
tmp = Util.make_components_hash(self, args)
|
58
|
+
super(tmp)
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
# == Description
|
63
|
+
#
|
64
|
+
# Returns the full path for a WS Bundler::URI, as required by Net::HTTP::Get.
|
65
|
+
#
|
66
|
+
# If the Bundler::URI contains a query, the full path is Bundler::URI#path + '?' + Bundler::URI#query.
|
67
|
+
# Otherwise, the path is simply Bundler::URI#path.
|
68
|
+
#
|
69
|
+
# Example:
|
70
|
+
#
|
71
|
+
# uri = Bundler::URI::WS.build(path: '/foo/bar', query: 'test=true')
|
72
|
+
# uri.request_uri # => "/foo/bar?test=true"
|
73
|
+
#
|
74
|
+
def request_uri
|
75
|
+
return unless @path
|
76
|
+
|
77
|
+
url = @query ? "#@path?#@query" : @path.dup
|
78
|
+
url.start_with?(?/.freeze) ? url : ?/ + url
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
@@schemes['WS'] = WS
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
# = uri/wss.rb
|
3
|
+
#
|
4
|
+
# Author:: Matt Muller <mamuller@amazon.com>
|
5
|
+
# License:: You can redistribute it and/or modify it under the same term as Ruby.
|
6
|
+
#
|
7
|
+
# See Bundler::URI for general documentation
|
8
|
+
#
|
9
|
+
|
10
|
+
require_relative 'ws'
|
11
|
+
|
12
|
+
module Bundler::URI
|
13
|
+
|
14
|
+
# The default port for WSS URIs is 443, and the scheme is 'wss:' rather
|
15
|
+
# than 'ws:'. Other than that, WSS URIs are identical to WS URIs;
|
16
|
+
# see Bundler::URI::WS.
|
17
|
+
class WSS < WS
|
18
|
+
# A Default port of 443 for Bundler::URI::WSS
|
19
|
+
DEFAULT_PORT = 443
|
20
|
+
end
|
21
|
+
@@schemes['WSS'] = WSS
|
22
|
+
end
|
data/bundler/lib/bundler.rb
CHANGED
@@ -66,6 +66,7 @@ module Bundler
|
|
66
66
|
autoload :RubyDsl, File.expand_path("bundler/ruby_dsl", __dir__)
|
67
67
|
autoload :RubyVersion, File.expand_path("bundler/ruby_version", __dir__)
|
68
68
|
autoload :Runtime, File.expand_path("bundler/runtime", __dir__)
|
69
|
+
autoload :SelfManager, File.expand_path("bundler/self_manager", __dir__)
|
69
70
|
autoload :Settings, File.expand_path("bundler/settings", __dir__)
|
70
71
|
autoload :SharedHelpers, File.expand_path("bundler/shared_helpers", __dir__)
|
71
72
|
autoload :Source, File.expand_path("bundler/source", __dir__)
|
@@ -643,15 +644,20 @@ EOF
|
|
643
644
|
Bundler.rubygems.clear_paths
|
644
645
|
end
|
645
646
|
|
647
|
+
def self_manager
|
648
|
+
@self_manager ||= begin
|
649
|
+
require_relative "bundler/self_manager"
|
650
|
+
Bundler::SelfManager.new
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
646
654
|
private
|
647
655
|
|
648
656
|
def eval_yaml_gemspec(path, contents)
|
649
657
|
require_relative "bundler/psyched_yaml"
|
650
658
|
|
651
|
-
# If the YAML is invalid, Syck raises an ArgumentError, and Psych
|
652
|
-
# raises a Psych::SyntaxError. See psyched_yaml.rb for more info.
|
653
659
|
Gem::Specification.from_yaml(contents)
|
654
|
-
rescue
|
660
|
+
rescue ::Psych::SyntaxError, ArgumentError, Gem::EndOfYAMLException, Gem::Exception
|
655
661
|
eval_gemspec(path, contents)
|
656
662
|
end
|
657
663
|
|
@@ -190,7 +190,7 @@ class Gem::CommandManager
|
|
190
190
|
raise Gem::CommandLineError,
|
191
191
|
"Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
|
192
192
|
elsif possibilities.empty?
|
193
|
-
raise Gem::
|
193
|
+
raise Gem::UnknownCommandError.new(cmd_name)
|
194
194
|
end
|
195
195
|
|
196
196
|
self[possibilities.first]
|
@@ -27,6 +27,8 @@ class Gem::Commands::InstallCommand < Gem::Command
|
|
27
27
|
:without_groups => [],
|
28
28
|
})
|
29
29
|
|
30
|
+
defaults.merge!(install_update_options)
|
31
|
+
|
30
32
|
super 'install', 'Install a gem into the local repository', defaults
|
31
33
|
|
32
34
|
add_install_update_options
|
@@ -43,8 +45,9 @@ class Gem::Commands::InstallCommand < Gem::Command
|
|
43
45
|
end
|
44
46
|
|
45
47
|
def defaults_str # :nodoc:
|
46
|
-
"--both --version '#{Gem::Requirement.default}' --
|
47
|
-
"--install-dir #{Gem.dir} --lock"
|
48
|
+
"--both --version '#{Gem::Requirement.default}' --no-force\n" +
|
49
|
+
"--install-dir #{Gem.dir} --lock\n" +
|
50
|
+
install_update_defaults_str
|
48
51
|
end
|
49
52
|
|
50
53
|
def description # :nodoc:
|
@@ -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
|
-
Gem::OptionParser.accept :Port do |port|
|
15
|
-
if port =~ /\A\d+\z/
|
16
|
-
port = Integer port
|
17
|
-
raise Gem::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 Gem::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,
|
@@ -253,6 +251,8 @@ By default, this RubyGems will install gem as:
|
|
253
251
|
Dir.chdir path do
|
254
252
|
bin_file = "gem"
|
255
253
|
|
254
|
+
require 'tmpdir'
|
255
|
+
|
256
256
|
dest_file = target_bin_path(bin_dir, bin_file)
|
257
257
|
bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
|
258
258
|
|
@@ -465,20 +465,8 @@ By default, this RubyGems will install gem as:
|
|
465
465
|
lib_dir = RbConfig::CONFIG[site_or_vendor]
|
466
466
|
bin_dir = RbConfig::CONFIG['bindir']
|
467
467
|
else
|
468
|
-
|
469
|
-
|
470
|
-
# sitelibdir/vendorlibdir.
|
471
|
-
if defined?(APPLE_GEM_HOME) and
|
472
|
-
# just in case Apple and RubyGems don't get this patched up proper.
|
473
|
-
(prefix == RbConfig::CONFIG['libdir'] or
|
474
|
-
# this one is important
|
475
|
-
prefix == File.join(RbConfig::CONFIG['libdir'], 'ruby'))
|
476
|
-
lib_dir = RbConfig::CONFIG[site_or_vendor]
|
477
|
-
bin_dir = RbConfig::CONFIG['bindir']
|
478
|
-
else
|
479
|
-
lib_dir = File.join prefix, 'lib'
|
480
|
-
bin_dir = File.join prefix, 'bin'
|
481
|
-
end
|
468
|
+
lib_dir = File.join prefix, 'lib'
|
469
|
+
bin_dir = File.join prefix, 'bin'
|
482
470
|
end
|
483
471
|
|
484
472
|
[prepend_destdir_if_present(lib_dir), prepend_destdir_if_present(bin_dir)]
|
@@ -19,9 +19,13 @@ 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
|
|
@@ -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
|
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
|
|
@@ -96,7 +143,7 @@ module Gem::Deprecate
|
|
96
143
|
end
|
97
144
|
|
98
145
|
# Deprecation method to deprecate Rubygems commands
|
99
|
-
def rubygems_deprecate_command
|
146
|
+
def rubygems_deprecate_command
|
100
147
|
class_eval do
|
101
148
|
define_method "deprecated?" do
|
102
149
|
true
|
@@ -104,7 +151,7 @@ module Gem::Deprecate
|
|
104
151
|
|
105
152
|
define_method "deprecation_warning" do
|
106
153
|
msg = [ "#{self.command} command is deprecated",
|
107
|
-
". It will be removed in Rubygems #{
|
154
|
+
". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}.\n",
|
108
155
|
]
|
109
156
|
|
110
157
|
alert_warning "#{msg.join}" unless Gem::Deprecate.skip
|
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
|
|
data/lib/rubygems/ext/builder.rb
CHANGED
@@ -64,14 +64,16 @@ class Gem::Ext::Builder
|
|
64
64
|
require "open3"
|
65
65
|
# Set $SOURCE_DATE_EPOCH for the subprocess.
|
66
66
|
env = {'SOURCE_DATE_EPOCH' => Gem.source_date_epoch_string}
|
67
|
-
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
|
68
72
|
if verbose
|
69
73
|
puts output
|
70
74
|
else
|
71
75
|
results << output
|
72
76
|
end
|
73
|
-
rescue => error
|
74
|
-
raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
|
75
77
|
ensure
|
76
78
|
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
77
79
|
end
|
@@ -181,10 +181,19 @@ module Gem::InstallUpdateOptions
|
|
181
181
|
end
|
182
182
|
|
183
183
|
##
|
184
|
-
# Default options for the gem install
|
184
|
+
# Default options for the gem install and update commands.
|
185
|
+
|
186
|
+
def install_update_options
|
187
|
+
{
|
188
|
+
:document => %w[ri],
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
192
|
+
##
|
193
|
+
# Default description for the gem install and update commands.
|
185
194
|
|
186
195
|
def install_update_defaults_str
|
187
|
-
'--document=
|
196
|
+
'--document=ri'
|
188
197
|
end
|
189
198
|
|
190
199
|
end
|