rubygems-update 2.7.6 → 2.7.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -23
  3. data/History.txt +116 -0
  4. data/Manifest.txt +3 -3
  5. data/Rakefile +12 -2
  6. data/bundler/CHANGELOG.md +130 -0
  7. data/bundler/README.md +5 -1
  8. data/bundler/bundler.gemspec +2 -1
  9. data/bundler/lib/bundler.rb +12 -8
  10. data/bundler/lib/bundler/build_metadata.rb +19 -2
  11. data/bundler/lib/bundler/cli.rb +3 -1
  12. data/bundler/lib/bundler/cli/check.rb +1 -1
  13. data/bundler/lib/bundler/cli/exec.rb +4 -4
  14. data/bundler/lib/bundler/cli/gem.rb +5 -2
  15. data/bundler/lib/bundler/cli/init.rb +5 -0
  16. data/bundler/lib/bundler/cli/install.rb +2 -2
  17. data/bundler/lib/bundler/cli/outdated.rb +1 -1
  18. data/bundler/lib/bundler/cli/update.rb +3 -3
  19. data/bundler/lib/bundler/compact_index_client/updater.rb +10 -1
  20. data/bundler/lib/bundler/current_ruby.rb +8 -1
  21. data/bundler/lib/bundler/definition.rb +33 -23
  22. data/bundler/lib/bundler/dep_proxy.rb +2 -2
  23. data/bundler/lib/bundler/dependency.rb +1 -0
  24. data/bundler/lib/bundler/deprecate.rb +2 -1
  25. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  26. data/bundler/lib/bundler/env.rb +10 -8
  27. data/bundler/lib/bundler/fetcher.rb +3 -3
  28. data/bundler/lib/bundler/fetcher/downloader.rb +10 -5
  29. data/bundler/lib/bundler/fetcher/index.rb +2 -2
  30. data/bundler/lib/bundler/friendly_errors.rb +2 -0
  31. data/bundler/lib/bundler/gem_helper.rb +1 -1
  32. data/bundler/lib/bundler/gem_version_promoter.rb +12 -0
  33. data/bundler/lib/bundler/injector.rb +5 -5
  34. data/bundler/lib/bundler/installer.rb +12 -4
  35. data/bundler/lib/bundler/installer/gem_installer.rb +9 -2
  36. data/bundler/lib/bundler/installer/parallel_installer.rb +1 -1
  37. data/bundler/lib/bundler/lazy_specification.rb +1 -1
  38. data/bundler/lib/bundler/mirror.rb +2 -2
  39. data/bundler/lib/bundler/plugin.rb +2 -2
  40. data/bundler/lib/bundler/plugin/index.rb +7 -2
  41. data/bundler/lib/bundler/process_lock.rb +1 -1
  42. data/bundler/lib/bundler/resolver.rb +10 -9
  43. data/bundler/lib/bundler/resolver/spec_group.rb +0 -5
  44. data/bundler/lib/bundler/ruby_version.rb +1 -1
  45. data/bundler/lib/bundler/rubygems_integration.rb +9 -3
  46. data/bundler/lib/bundler/runtime.rb +2 -2
  47. data/bundler/lib/bundler/shared_helpers.rb +15 -3
  48. data/bundler/lib/bundler/source/git.rb +2 -1
  49. data/bundler/lib/bundler/source/git/git_proxy.rb +6 -1
  50. data/bundler/lib/bundler/source/metadata.rb +1 -1
  51. data/bundler/lib/bundler/source/rubygems.rb +11 -2
  52. data/bundler/lib/bundler/source/rubygems/remote.rb +4 -1
  53. data/bundler/lib/bundler/spec_set.rb +4 -1
  54. data/bundler/lib/bundler/templates/Executable +1 -1
  55. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  56. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +2 -0
  57. data/bundler/lib/bundler/ui/shell.rb +3 -1
  58. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -1
  59. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +7 -2
  60. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  61. data/bundler/lib/bundler/version.rb +1 -1
  62. data/bundler/man/bundle-binstubs.ronn +3 -3
  63. data/bundler/man/bundle-check.ronn +3 -3
  64. data/bundler/man/bundle-config.ronn +13 -9
  65. data/bundler/man/bundle-doctor.ronn +33 -0
  66. data/bundler/man/bundle-exec.ronn +3 -3
  67. data/bundler/man/bundle-gem.ronn +1 -1
  68. data/bundler/man/bundle-init.ronn +15 -4
  69. data/bundler/man/bundle-inject.ronn +3 -3
  70. data/bundler/man/bundle-install.ronn +12 -3
  71. data/bundler/man/bundle-lock.ronn +1 -1
  72. data/bundler/man/bundle-outdated.ronn +1 -1
  73. data/bundler/man/bundle-package.ronn +3 -3
  74. data/bundler/man/bundle-show.ronn +3 -2
  75. data/bundler/man/bundle-update.ronn +18 -14
  76. data/bundler/man/bundle-viz.ronn +1 -1
  77. data/bundler/man/bundle.ronn +27 -27
  78. data/bundler/man/gemfile.5.ronn +24 -9
  79. data/lib/rubygems.rb +24 -11
  80. data/lib/rubygems/bundler_version_finder.rb +9 -22
  81. data/lib/rubygems/command_manager.rb +6 -4
  82. data/lib/rubygems/commands/install_command.rb +7 -0
  83. data/lib/rubygems/commands/owner_command.rb +4 -1
  84. data/lib/rubygems/commands/push_command.rb +37 -4
  85. data/lib/rubygems/commands/setup_command.rb +3 -3
  86. data/lib/rubygems/commands/uninstall_command.rb +1 -1
  87. data/lib/rubygems/commands/unpack_command.rb +1 -1
  88. data/lib/rubygems/core_ext/kernel_require.rb +2 -7
  89. data/lib/rubygems/dependency.rb +1 -0
  90. data/lib/rubygems/dependency_installer.rb +4 -2
  91. data/lib/rubygems/exceptions.rb +5 -1
  92. data/lib/rubygems/gemcutter_utilities.rb +5 -2
  93. data/lib/rubygems/indexer.rb +1 -1
  94. data/lib/rubygems/install_update_options.rb +1 -1
  95. data/lib/rubygems/installer.rb +29 -6
  96. data/lib/rubygems/package.rb +20 -2
  97. data/lib/rubygems/package/tar_header.rb +3 -1
  98. data/lib/rubygems/package/tar_writer.rb +2 -3
  99. data/lib/rubygems/remote_fetcher.rb +1 -1
  100. data/lib/rubygems/request_set.rb +28 -17
  101. data/lib/rubygems/requirement.rb +14 -3
  102. data/lib/rubygems/resolver/api_specification.rb +5 -0
  103. data/lib/rubygems/security.rb +6 -1
  104. data/lib/rubygems/server.rb +3 -3
  105. data/lib/rubygems/source.rb +1 -1
  106. data/lib/rubygems/specification.rb +7 -10
  107. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  108. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  109. data/lib/rubygems/test_case.rb +22 -4
  110. data/lib/rubygems/test_utilities.rb +1 -1
  111. data/lib/rubygems/user_interaction.rb +9 -2
  112. data/lib/rubygems/util/licenses.rb +35 -4
  113. data/lib/rubygems/version.rb +7 -1
  114. data/lib/ubygems.rb +3 -0
  115. data/test/rubygems/test_bundled_ca.rb +7 -4
  116. data/test/rubygems/test_gem.rb +45 -10
  117. data/test/rubygems/test_gem_bundler_version_finder.rb +8 -7
  118. data/test/rubygems/test_gem_command_manager.rb +2 -2
  119. data/test/rubygems/test_gem_commands_build_command.rb +2 -0
  120. data/test/rubygems/test_gem_commands_install_command.rb +37 -0
  121. data/test/rubygems/test_gem_commands_push_command.rb +20 -0
  122. data/test/rubygems/test_gem_commands_setup_command.rb +6 -1
  123. data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
  124. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
  125. data/test/rubygems/test_gem_dependency.rb +1 -1
  126. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -4
  127. data/test/rubygems/test_gem_install_update_options.rb +2 -0
  128. data/test/rubygems/test_gem_installer.rb +109 -3
  129. data/test/rubygems/test_gem_package.rb +90 -5
  130. data/test/rubygems/test_gem_package_tar_header.rb +2 -1
  131. data/test/rubygems/test_gem_remote_fetcher.rb +6 -2
  132. data/test/rubygems/test_gem_request.rb +5 -2
  133. data/test/rubygems/test_gem_requirement.rb +6 -0
  134. data/test/rubygems/test_gem_resolver_api_specification.rb +24 -0
  135. data/test/rubygems/test_gem_resolver_installer_set.rb +1 -1
  136. data/test/rubygems/test_gem_security_policy.rb +3 -3
  137. data/test/rubygems/test_gem_server.rb +12 -12
  138. data/test/rubygems/test_gem_specification.rb +27 -13
  139. data/test/rubygems/test_gem_stream_ui.rb +2 -2
  140. data/test/rubygems/test_gem_text.rb +5 -0
  141. data/test/rubygems/test_gem_util.rb +4 -2
  142. data/test/rubygems/test_gem_version.rb +29 -2
  143. data/util/ci +1 -0
  144. data/util/generate_spdx_license_list.rb +15 -6
  145. data/util/update_bundled_ca_certificates.rb +1 -3
  146. metadata +12 -12
  147. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  148. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -1,13 +1,8 @@
1
- module Gem::BundlerVersionFinder
2
- @without_filtering = false
1
+ # frozen_string_literal: true
3
2
 
4
- def self.without_filtering
5
- without_filtering, @without_filtering = true, @without_filtering
6
- yield
7
- ensure
8
- @without_filtering = without_filtering
9
- end
3
+ require "rubygems/util"
10
4
 
5
+ module Gem::BundlerVersionFinder
11
6
  def self.bundler_version
12
7
  version, _ = bundler_version_with_reason
13
8
 
@@ -17,8 +12,6 @@ module Gem::BundlerVersionFinder
17
12
  end
18
13
 
19
14
  def self.bundler_version_with_reason
20
- return if @without_filtering
21
-
22
15
  if v = ENV["BUNDLER_VERSION"]
23
16
  return [v, "`$BUNDLER_VERSION`"]
24
17
  end
@@ -36,7 +29,7 @@ module Gem::BundlerVersionFinder
36
29
  return unless vr = bundler_version_with_reason
37
30
  <<-EOS
38
31
  Could not find 'bundler' (#{vr.first}) required by #{vr.last}.
39
- To update to the lastest version installed on your system, run `bundle update --bundler`.
32
+ To update to the latest version installed on your system, run `bundle update --bundler`.
40
33
  To install the missing version, run `gem install bundler:#{vr.first}`
41
34
  EOS
42
35
  end
@@ -44,20 +37,14 @@ To install the missing version, run `gem install bundler:#{vr.first}`
44
37
  def self.compatible?(spec)
45
38
  return true unless spec.name == "bundler".freeze
46
39
  return true unless bundler_version = self.bundler_version
47
- if bundler_version.segments.first >= 2
48
- spec.version == bundler_version
49
- else # 1.x
50
- spec.version.segments.first < 2
51
- end
40
+
41
+ spec.version.segments.first == bundler_version.segments.first
52
42
  end
53
43
 
54
44
  def self.filter!(specs)
55
45
  return unless bundler_version = self.bundler_version
56
- if bundler_version.segments.first >= 2
57
- specs.reject! { |spec| spec.version != bundler_version }
58
- else # 1.x
59
- specs.reject! { |spec| spec.version.segments.first >= 2}
60
- end
46
+
47
+ specs.reject! { |spec| spec.version.segments.first != bundler_version.segments.first }
61
48
  end
62
49
 
63
50
  def self.bundle_update_bundler_version
@@ -102,7 +89,7 @@ To install the missing version, run `gem install bundler:#{vr.first}`
102
89
  lockfile = case gemfile
103
90
  when "gems.rb" then "gems.locked"
104
91
  else "#{gemfile}.lock"
105
- end.untaint
92
+ end.dup.untaint
106
93
 
107
94
  return unless File.file?(lockfile)
108
95
 
@@ -7,6 +7,7 @@
7
7
 
8
8
  require 'rubygems/command'
9
9
  require 'rubygems/user_interaction'
10
+ require 'rubygems/text'
10
11
 
11
12
  ##
12
13
  # The command manager registers and installs all the individual sub-commands
@@ -32,6 +33,7 @@ require 'rubygems/user_interaction'
32
33
 
33
34
  class Gem::CommandManager
34
35
 
36
+ include Gem::Text
35
37
  include Gem::UserInteraction
36
38
 
37
39
  BUILTIN_COMMANDS = [ # :nodoc:
@@ -140,12 +142,12 @@ class Gem::CommandManager
140
142
  def run(args, build_args=nil)
141
143
  process_args(args, build_args)
142
144
  rescue StandardError, Timeout::Error => ex
143
- alert_error "While executing gem ... (#{ex.class})\n #{ex}"
145
+ alert_error clean_text("While executing gem ... (#{ex.class})\n #{ex}")
144
146
  ui.backtrace ex
145
147
 
146
148
  terminate_interaction(1)
147
149
  rescue Interrupt
148
- alert_error "Interrupted"
150
+ alert_error clean_text("Interrupted")
149
151
  terminate_interaction(1)
150
152
  end
151
153
 
@@ -163,7 +165,7 @@ class Gem::CommandManager
163
165
  say Gem::VERSION
164
166
  terminate_interaction 0
165
167
  when /^-/ then
166
- alert_error "Invalid option: #{args.first}. See 'gem --help'."
168
+ alert_error clean_text("Invalid option: #{args.first}. See 'gem --help'.")
167
169
  terminate_interaction 1
168
170
  else
169
171
  cmd_name = args.shift.downcase
@@ -212,7 +214,7 @@ class Gem::CommandManager
212
214
  rescue Exception => e
213
215
  e = load_error if load_error
214
216
 
215
- alert_error "Loading command: #{command_name} (#{e.class})\n\t#{e}"
217
+ alert_error clean_text("Loading command: #{command_name} (#{e.class})\n\t#{e}")
216
218
  ui.backtrace e
217
219
  end
218
220
  end
@@ -117,6 +117,13 @@ to write the specification by hand. For example:
117
117
  some_extension_gem (1.0)
118
118
  $
119
119
 
120
+ Command Alias
121
+ ==========================
122
+
123
+ You can use `i` command instead of `install`.
124
+
125
+ $ gem i GEMNAME
126
+
120
127
  EOF
121
128
  end
122
129
 
@@ -2,8 +2,11 @@
2
2
  require 'rubygems/command'
3
3
  require 'rubygems/local_remote_options'
4
4
  require 'rubygems/gemcutter_utilities'
5
+ require 'rubygems/text'
5
6
 
6
7
  class Gem::Commands::OwnerCommand < Gem::Command
8
+
9
+ include Gem::Text
7
10
  include Gem::LocalRemoteOptions
8
11
  include Gem::GemcutterUtilities
9
12
 
@@ -64,7 +67,7 @@ permission to.
64
67
  end
65
68
 
66
69
  with_response response do |resp|
67
- owners = Gem::SafeYAML.load resp.body
70
+ owners = Gem::SafeYAML.load clean_text(resp.body)
68
71
 
69
72
  say "Owners for gem: #{name}"
70
73
  owners.each do |owner|
@@ -13,7 +13,7 @@ class Gem::Commands::PushCommand < Gem::Command
13
13
  The push command uploads a gem to the push server (the default is
14
14
  https://rubygems.org) and adds it to the index.
15
15
 
16
- The gem can be removed from the index (but only the index) using the yank
16
+ The gem can be removed from the index and deleted from the server using the yank
17
17
  command. For further discussion see the help for the yank command.
18
18
  EOF
19
19
  end
@@ -29,6 +29,8 @@ command. For further discussion see the help for the yank command.
29
29
  def initialize
30
30
  super 'push', 'Push a gem up to the gem server', :host => self.host
31
31
 
32
+ @user_defined_host = false
33
+
32
34
  add_proxy_option
33
35
  add_key_option
34
36
 
@@ -36,20 +38,41 @@ command. For further discussion see the help for the yank command.
36
38
  'Push to another gemcutter-compatible host',
37
39
  ' (e.g. https://rubygems.org)') do |value, options|
38
40
  options[:host] = value
41
+ @user_defined_host = true
39
42
  end
40
43
 
41
44
  @host = nil
42
45
  end
43
46
 
44
47
  def execute
45
- @host = options[:host]
48
+ gem_name = get_one_gem_name
49
+ default_gem_server, push_host = get_hosts_for(gem_name)
50
+
51
+ default_host = nil
52
+ user_defined_host = nil
53
+
54
+ if @user_defined_host
55
+ user_defined_host = options[:host]
56
+ else
57
+ default_host = options[:host]
58
+ end
59
+
60
+ @host = if user_defined_host
61
+ user_defined_host
62
+ elsif default_gem_server
63
+ default_gem_server
64
+ elsif push_host
65
+ push_host
66
+ else
67
+ default_host
68
+ end
46
69
 
47
70
  sign_in @host
48
71
 
49
- send_gem get_one_gem_name
72
+ send_gem(gem_name)
50
73
  end
51
74
 
52
- def send_gem name
75
+ def send_gem(name)
53
76
  args = [:post, "api/v1/gems"]
54
77
 
55
78
  latest_rubygems_version = Gem.latest_rubygems_version
@@ -100,5 +123,15 @@ You can upgrade or downgrade to the latest release version with:
100
123
  with_response response
101
124
  end
102
125
 
126
+ private
127
+
128
+ def get_hosts_for(name)
129
+ gem_metadata = Gem::Package.new(name).spec.metadata
130
+
131
+ [
132
+ gem_metadata["default_gem_server"],
133
+ gem_metadata["allowed_push_host"]
134
+ ]
135
+ end
103
136
  end
104
137
 
@@ -351,7 +351,7 @@ By default, this RubyGems will install gem as:
351
351
  return unless Gem::USE_BUNDLER_FOR_GEMDEPS
352
352
 
353
353
  specs_dir = Gem::Specification.default_specifications_dir
354
- File.join(options[:destdir], specs_dir) unless Gem.win_platform?
354
+ specs_dir = File.join(options[:destdir], specs_dir) unless Gem.win_platform?
355
355
  mkdir_p specs_dir
356
356
 
357
357
  # Workaround for non-git environment.
@@ -385,8 +385,8 @@ By default, this RubyGems will install gem as:
385
385
  each {|default_gem| rm_r File.join(bundler_spec.gems_dir, default_gem) }
386
386
  end
387
387
 
388
- bundler_bin_dir = File.join(Gem.default_dir, 'gems', bundler_spec.full_name, bundler_spec.bindir)
389
- File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform?
388
+ bundler_bin_dir = bundler_spec.bin_dir
389
+ bundler_bin_dir = File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform?
390
390
  mkdir_p bundler_bin_dir
391
391
  bundler_spec.executables.each do |e|
392
392
  cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e)
@@ -48,7 +48,7 @@ class Gem::Commands::UninstallCommand < Gem::Command
48
48
  end
49
49
 
50
50
  add_option('-n', '--bindir DIR',
51
- 'Directory to remove binaries from') do |value, options|
51
+ 'Directory to remove executables from') do |value, options|
52
52
  options[:bin_dir] = File.expand_path(value)
53
53
  end
54
54
 
@@ -183,7 +183,7 @@ command help for an example.
183
183
  when 'metadata' then
184
184
  metadata = entry.read
185
185
  when 'metadata.gz' then
186
- metadata = Gem.gunzip entry.read
186
+ metadata = Gem::Util.gunzip entry.read
187
187
  end
188
188
  end
189
189
  end
@@ -11,13 +11,8 @@ module Kernel
11
11
 
12
12
  RUBYGEMS_ACTIVATION_MONITOR = Monitor.new # :nodoc:
13
13
 
14
- if defined?(gem_original_require) then
15
- # Ruby ships with a custom_require, override its require
16
- remove_method :require
17
- else
18
- ##
19
- # The Kernel#require from before RubyGems was loaded.
20
-
14
+ # Make sure we have a reference to Ruby's original Kernel#require
15
+ unless defined?(gem_original_require)
21
16
  alias gem_original_require require
22
17
  private :gem_original_require
23
18
  end
@@ -2,6 +2,7 @@
2
2
  ##
3
3
  # The Dependency class holds a Gem name and a Gem::Requirement.
4
4
 
5
+ require "rubygems/bundler_version_finder"
5
6
  require "rubygems/requirement"
6
7
 
7
8
  class Gem::Dependency
@@ -113,7 +113,7 @@ class Gem::DependencyInstaller
113
113
 
114
114
  ##
115
115
  #--
116
- # TODO remove, no longer used
116
+ # TODO remove at RubyGems 4, no longer used
117
117
 
118
118
  def add_found_dependencies to_do, dependency_list # :nodoc:
119
119
  seen = {}
@@ -163,6 +163,7 @@ class Gem::DependencyInstaller
163
163
 
164
164
  dependency_list.remove_specs_unsatisfied_by dependencies
165
165
  end
166
+ deprecate :add_found_dependencies, :none, 2018, 12
166
167
 
167
168
  ##
168
169
  # Creates an AvailableSet to install from based on +dep_or_name+ and
@@ -321,7 +322,7 @@ class Gem::DependencyInstaller
321
322
  # Gathers all dependencies necessary for the installation from local and
322
323
  # remote sources unless the ignore_dependencies was given.
323
324
  #--
324
- # TODO remove at RubyGems 3
325
+ # TODO remove at RubyGems 4
325
326
 
326
327
  def gather_dependencies # :nodoc:
327
328
  specs = @available.all_specs
@@ -354,6 +355,7 @@ class Gem::DependencyInstaller
354
355
 
355
356
  @gems_to_install = dependency_list.dependency_order.reverse
356
357
  end
358
+ deprecate :gather_dependencies, :none, 2018, 12
357
359
 
358
360
  def in_background what # :nodoc:
359
361
  fork_happened = false
@@ -4,6 +4,8 @@
4
4
  # Each exception needs a brief description and the scenarios where it is
5
5
  # likely to be raised
6
6
 
7
+ require 'rubygems/deprecate'
8
+
7
9
  ##
8
10
  # Base exception class for RubyGems. All exception raised by RubyGems are a
9
11
  # subclass of this one.
@@ -11,10 +13,12 @@ class Gem::Exception < RuntimeError
11
13
 
12
14
  ##
13
15
  #--
14
- # TODO: remove in RubyGems 3, nobody sets this
16
+ # TODO: remove in RubyGems 4, nobody sets this
15
17
 
16
18
  attr_accessor :source_exception # :nodoc:
17
19
 
20
+ extend Gem::Deprecate
21
+ deprecate :source_exception, :none, 2018, 12
18
22
  end
19
23
 
20
24
  class Gem::CommandLineError < Gem::Exception; end
@@ -1,11 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/remote_fetcher'
3
+ require 'rubygems/text'
3
4
 
4
5
  ##
5
6
  # Utility methods for using the RubyGems API.
6
7
 
7
8
  module Gem::GemcutterUtilities
8
9
 
10
+ include Gem::Text
11
+
9
12
  # TODO: move to Gem::Command
10
13
  OptionParser.accept Symbol do |value|
11
14
  value.to_sym
@@ -145,13 +148,13 @@ module Gem::GemcutterUtilities
145
148
  if block_given? then
146
149
  yield response
147
150
  else
148
- say response.body
151
+ say clean_text(response.body)
149
152
  end
150
153
  else
151
154
  message = response.body
152
155
  message = "#{error_prefix}: #{message}" if error_prefix
153
156
 
154
- say message
157
+ say clean_text(message)
155
158
  terminate_interaction 1 # TODO: question this
156
159
  end
157
160
  end
@@ -347,7 +347,7 @@ class Gem::Indexer
347
347
  data = Gem.read_binary path
348
348
  compressed_data = Gem.read_binary "#{path}.#{extension}"
349
349
 
350
- unless data == Gem.inflate(compressed_data) then
350
+ unless data == Gem::Util.inflate(compressed_data) then
351
351
  raise "Compressed file #{compressed_path} does not match uncompressed file #{path}"
352
352
  end
353
353
  end
@@ -25,7 +25,7 @@ module Gem::InstallUpdateOptions
25
25
  end
26
26
 
27
27
  add_option(:"Install/Update", '-n', '--bindir DIR',
28
- 'Directory where binary files are',
28
+ 'Directory where executables are',
29
29
  'located') do |value, options|
30
30
  options[:bin_dir] = File.expand_path(value)
31
31
  end
@@ -7,6 +7,7 @@
7
7
 
8
8
  require 'rubygems/command'
9
9
  require 'rubygems/exceptions'
10
+ require 'rubygems/deprecate'
10
11
  require 'rubygems/package'
11
12
  require 'rubygems/ext'
12
13
  require 'rubygems/user_interaction'
@@ -27,6 +28,8 @@ require 'fileutils'
27
28
 
28
29
  class Gem::Installer
29
30
 
31
+ extend Gem::Deprecate
32
+
30
33
  ##
31
34
  # Paths where env(1) might live. Some systems are broken and have it in
32
35
  # /bin
@@ -707,9 +710,26 @@ class Gem::Installer
707
710
  unpack or File.writable?(gem_home)
708
711
  end
709
712
 
710
- def verify_spec_name
711
- return if spec.name =~ Gem::Specification::VALID_NAME_PATTERN
712
- raise Gem::InstallError, "#{spec} has an invalid name"
713
+ def verify_spec
714
+ unless spec.name =~ Gem::Specification::VALID_NAME_PATTERN
715
+ raise Gem::InstallError, "#{spec} has an invalid name"
716
+ end
717
+
718
+ if spec.raw_require_paths.any?{|path| path =~ /\r\n|\r|\n/ }
719
+ raise Gem::InstallError, "#{spec} has an invalid require_paths"
720
+ end
721
+
722
+ if spec.extensions.any?{|ext| ext =~ /\r\n|\r|\n/ }
723
+ raise Gem::InstallError, "#{spec} has an invalid extensions"
724
+ end
725
+
726
+ unless spec.specification_version.to_s =~ /\A\d+\z/
727
+ raise Gem::InstallError, "#{spec} has an invalid specification_version"
728
+ end
729
+
730
+ if spec.dependencies.any? {|dep| dep.type =~ /\r\n|\r|\n/ || dep.name =~ /\r\n|\r|\n/ }
731
+ raise Gem::InstallError, "#{spec} has an invalid dependencies"
732
+ end
713
733
  end
714
734
 
715
735
  ##
@@ -777,13 +797,14 @@ TEXT
777
797
  ##
778
798
  # Logs the build +output+ in +build_dir+, then raises Gem::Ext::BuildError.
779
799
  #
780
- # TODO: Delete this for RubyGems 3. It remains for API compatibility
800
+ # TODO: Delete this for RubyGems 4. It remains for API compatibility
781
801
 
782
802
  def extension_build_error(build_dir, output, backtrace = nil) # :nodoc:
783
803
  builder = Gem::Ext::Builder.new spec, @build_args
784
804
 
785
805
  builder.build_error build_dir, output, backtrace
786
806
  end
807
+ deprecate :extension_build_error, :none, 2018, 12
787
808
 
788
809
  ##
789
810
  # Reads the file index and extracts each file into the gem directory.
@@ -836,9 +857,11 @@ TEXT
836
857
  def pre_install_checks
837
858
  verify_gem_home options[:unpack]
838
859
 
839
- ensure_loadable_spec
860
+ # The name and require_paths must be verified first, since it could contain
861
+ # ruby code that would be eval'ed in #ensure_loadable_spec
862
+ verify_spec
840
863
 
841
- verify_spec_name
864
+ ensure_loadable_spec
842
865
 
843
866
  if options[:install_as_default]
844
867
  Gem.ensure_default_gem_subdirectories gem_home