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.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -4
  3. data/CONTRIBUTING.md +40 -10
  4. data/Manifest.txt +6 -5
  5. data/POLICIES.md +22 -8
  6. data/README.md +9 -7
  7. data/UPGRADING.md +5 -81
  8. data/bin/gem +1 -6
  9. data/bundler/CHANGELOG.md +27 -0
  10. data/bundler/exe/bundle +7 -8
  11. data/bundler/lib/bundler/build_metadata.rb +2 -2
  12. data/bundler/lib/bundler/cli/gem.rb +1 -1
  13. data/bundler/lib/bundler/cli/install.rb +2 -0
  14. data/bundler/lib/bundler/cli.rb +5 -0
  15. data/bundler/lib/bundler/definition.rb +14 -2
  16. data/bundler/lib/bundler/dependency.rb +5 -7
  17. data/bundler/lib/bundler/dsl.rb +0 -27
  18. data/bundler/lib/bundler/endpoint_specification.rb +0 -8
  19. data/bundler/lib/bundler/fetcher/compact_index.rb +9 -4
  20. data/bundler/lib/bundler/fetcher.rb +2 -5
  21. data/bundler/lib/bundler/injector.rb +10 -1
  22. data/bundler/lib/bundler/installer/gem_installer.rb +1 -6
  23. data/bundler/lib/bundler/installer.rb +1 -4
  24. data/bundler/lib/bundler/lockfile_parser.rb +10 -13
  25. data/bundler/lib/bundler/man/bundle-add.1 +9 -1
  26. data/bundler/lib/bundler/man/bundle-add.1.ronn +7 -1
  27. data/bundler/lib/bundler/man/bundle-config.1 +2 -2
  28. data/bundler/lib/bundler/man/bundle-config.1.ronn +3 -3
  29. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-install.1.ronn +2 -2
  31. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
  33. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  34. data/bundler/lib/bundler/man/gemfile.5.ronn +1 -1
  35. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  36. data/bundler/lib/bundler/process_lock.rb +1 -1
  37. data/bundler/lib/bundler/psyched_yaml.rb +1 -13
  38. data/bundler/lib/bundler/resolver.rb +34 -29
  39. data/bundler/lib/bundler/rubygems_ext.rb +2 -0
  40. data/bundler/lib/bundler/rubygems_integration.rb +11 -48
  41. data/bundler/lib/bundler/self_manager.rb +73 -0
  42. data/bundler/lib/bundler/shared_helpers.rb +2 -9
  43. data/bundler/lib/bundler/source/metadata.rb +1 -1
  44. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  45. data/bundler/lib/bundler/templates/Gemfile +0 -2
  46. data/bundler/lib/bundler/templates/gems.rb +0 -3
  47. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +10 -1
  48. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  49. data/bundler/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  50. data/bundler/lib/bundler/ui/shell.rb +1 -1
  51. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +6 -6
  52. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +2 -1
  53. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +2 -6
  54. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -6
  55. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +4 -9
  56. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +1 -19
  57. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +4 -22
  58. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  59. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  60. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  61. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
  62. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
  63. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
  64. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
  65. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
  66. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  67. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
  68. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
  69. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
  70. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  71. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
  72. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
  73. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
  74. data/bundler/lib/bundler/version.rb +1 -1
  75. data/bundler/lib/bundler.rb +9 -3
  76. data/hide_lib_for_update/note.txt +0 -4
  77. data/lib/rubygems/command_manager.rb +1 -1
  78. data/lib/rubygems/commands/install_command.rb +5 -2
  79. data/lib/rubygems/commands/server_command.rb +14 -77
  80. data/lib/rubygems/commands/setup_command.rb +4 -16
  81. data/lib/rubygems/commands/update_command.rb +9 -4
  82. data/lib/rubygems/defaults.rb +2 -20
  83. data/lib/rubygems/deprecate.rb +55 -8
  84. data/lib/rubygems/exceptions.rb +26 -1
  85. data/lib/rubygems/ext/builder.rb +5 -3
  86. data/lib/rubygems/install_update_options.rb +11 -2
  87. data/lib/rubygems/installer.rb +11 -1
  88. data/lib/rubygems/name_tuple.rb +2 -3
  89. data/lib/rubygems/path_support.rb +1 -6
  90. data/lib/rubygems/platform.rb +4 -0
  91. data/lib/rubygems/remote_fetcher.rb +1 -1
  92. data/lib/rubygems/resolver/installer_set.rb +1 -1
  93. data/lib/rubygems/security.rb +4 -3
  94. data/lib/rubygems/source.rb +3 -1
  95. data/lib/rubygems/spec_fetcher.rb +1 -1
  96. data/lib/rubygems/specification.rb +9 -13
  97. data/lib/rubygems/text.rb +21 -20
  98. data/lib/rubygems/uninstaller.rb +4 -1
  99. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  100. data/lib/rubygems/version.rb +2 -0
  101. data/lib/rubygems.rb +3 -3
  102. data/rubygems-update.gemspec +1 -1
  103. data/setup.rb +1 -6
  104. data/test/rubygems/helper.rb +20 -6
  105. data/test/rubygems/test_config.rb +2 -2
  106. data/test/rubygems/test_exit.rb +11 -0
  107. data/test/rubygems/test_gem.rb +46 -41
  108. data/test/rubygems/test_gem_command_manager.rb +16 -27
  109. data/test/rubygems/test_gem_commands_open_command.rb +1 -1
  110. data/test/rubygems/test_gem_commands_server_command.rb +4 -46
  111. data/test/rubygems/test_gem_commands_update_command.rb +2 -2
  112. data/test/rubygems/test_gem_path_support.rb +2 -6
  113. data/test/rubygems/test_gem_remote_fetcher.rb +15 -0
  114. data/test/rubygems/test_gem_requirement.rb +0 -1
  115. data/test/rubygems/test_gem_security.rb +1 -1
  116. data/test/rubygems/test_gem_source_git.rb +0 -5
  117. data/test/rubygems/test_gem_specification.rb +16 -25
  118. data/test/rubygems/test_gem_text.rb +6 -0
  119. data/test/rubygems/test_project_sanity.rb +1 -1
  120. data/test/rubygems/test_require.rb +0 -7
  121. metadata +9 -8
  122. data/bundler/lib/bundler/gemdeps.rb +0 -29
  123. data/lib/rubygems/server.rb +0 -882
  124. data/test/rubygems/bogussources.rb +0 -9
  125. 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
  #
4
4
  # Author:: Akira Yamada <akira@ruby-lang.org>
5
5
  # License:: You can redistribute it and/or modify it under the same term as Ruby.
6
- # Revision:: $Id$
7
6
  #
8
7
  # See Bundler::URI for general documentation
9
8
  #
@@ -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
- scheme, userinfo, host, port,
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
- scheme, userinfo, host, port,
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
 
@@ -1,6 +1,6 @@
1
1
  module Bundler::URI
2
2
  # :stopdoc:
3
- VERSION_CODE = '001000'.freeze
3
+ VERSION_CODE = '001001'.freeze
4
4
  VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
5
5
  # :startdoc:
6
6
  end
@@ -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
@@ -86,7 +86,6 @@
86
86
  # License::
87
87
  # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
88
88
  # You can redistribute it and/or modify it under the same term as Ruby.
89
- # Revision:: $Id$
90
89
  #
91
90
 
92
91
  module Bundler::URI
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.2.34".freeze
4
+ VERSION = "2.3.0".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
@@ -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 YamlLibrarySyntaxError, ArgumentError, Gem::EndOfYAMLException, Gem::Exception
660
+ rescue ::Psych::SyntaxError, ArgumentError, Gem::EndOfYAMLException, Gem::Exception
655
661
  eval_gemspec(path, contents)
656
662
  end
657
663
 
@@ -1,5 +1 @@
1
1
  This directory exists to prevent rubygems-update from being used as real code.
2
-
3
- If you haven't, you probably want to run `update_rubygems`.
4
-
5
- You can gem uninstall rubygems-update after doing that.
@@ -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::CommandLineError, "Unknown command #{cmd_name}"
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}' --document --no-force\n" +
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
- class Gem::Commands::ServerCommand < Gem::Command
7
- extend Gem::Deprecate
8
- rubygems_deprecate_command("3.3.0")
9
-
10
- def initialize
11
- super 'server', 'Documentation and gem repository HTTP server',
12
- :port => 8808, :gemdir => [], :daemon => false
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
- add_option '-p', '--port=PORT', :Port,
31
- 'port to listen on' do |port, options|
32
- options[:port] = port
33
- end
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
- add_option '--[no-]daemon', 'run as a daemon' do |daemon, options|
42
- options[:daemon] = daemon
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
- # Apple installed RubyGems into libdir, and RubyGems <= 1.1.0 gets
469
- # confused about installation location, so switch back to
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
- super 'update', 'Update installed gems to the latest version',
23
- :document => %w[rdoc ri],
24
- :force => false
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
- "--document --no-force --install-dir #{Gem.dir}"
58
+ "--no-force --install-dir #{Gem.dir}\n" +
59
+ install_update_defaults_str
55
60
  end
56
61
 
57
62
  def description # :nodoc:
@@ -34,21 +34,7 @@ module Gem
34
34
  # specified in the environment
35
35
 
36
36
  def self.default_dir
37
- path = if defined? RUBY_FRAMEWORK_VERSION
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
- if defined? RUBY_FRAMEWORK_VERSION # mac framework support
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
@@ -1,23 +1,70 @@
1
1
  # frozen_string_literal: true
2
2
  ##
3
- # Provides a single method +deprecate+ to be used to declare when
4
- # something is going away.
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.klass_method
24
+ # def self.some_class_method
8
25
  # # ...
9
26
  # end
10
27
  #
11
- # def instance_method
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 :instance_method, "X.z", 2011, 4
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 :klass_method, :none, 2011, 4
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(version = Gem::Deprecate.next_rubygems_major_version)
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 #{version}.\n",
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
@@ -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
 
@@ -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 = Open3.capture2e(env, *command, :chdir => dir)
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 command.
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=rdoc,ri --wrappers'
196
+ '--document=ri'
188
197
  end
189
198
 
190
199
  end