rubygems-update 3.2.0.rc.2 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +54 -51
  3. data/Manifest.txt +32 -29
  4. data/Rakefile +3 -1
  5. data/bundler/CHANGELOG.md +35 -1
  6. data/bundler/UPGRADING.md +1 -1
  7. data/bundler/lib/bundler.rb +4 -0
  8. data/bundler/lib/bundler/build_metadata.rb +2 -2
  9. data/bundler/lib/bundler/cli.rb +5 -2
  10. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  11. data/bundler/lib/bundler/cli/exec.rb +3 -3
  12. data/bundler/lib/bundler/cli/outdated.rb +2 -4
  13. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  14. data/bundler/lib/bundler/definition.rb +4 -9
  15. data/bundler/lib/bundler/env.rb +1 -1
  16. data/bundler/lib/bundler/feature_flag.rb +0 -1
  17. data/bundler/lib/bundler/fetcher/index.rb +2 -3
  18. data/bundler/lib/bundler/friendly_errors.rb +15 -0
  19. data/bundler/lib/bundler/index.rb +5 -1
  20. data/bundler/lib/bundler/injector.rb +9 -2
  21. data/bundler/lib/bundler/installer.rb +7 -5
  22. data/bundler/lib/bundler/lazy_specification.rb +5 -7
  23. data/bundler/lib/bundler/man/.document +1 -0
  24. data/bundler/{man → lib/bundler/man}/bundle-add.1.ronn +0 -0
  25. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1.ronn +0 -0
  26. data/bundler/{man → lib/bundler/man}/bundle-cache.1.ronn +0 -0
  27. data/bundler/{man → lib/bundler/man}/bundle-check.1.ronn +0 -0
  28. data/bundler/{man → lib/bundler/man}/bundle-clean.1.ronn +0 -0
  29. data/bundler/{man → lib/bundler/man}/bundle-config.1.ronn +1 -9
  30. data/bundler/{man → lib/bundler/man}/bundle-doctor.1.ronn +0 -0
  31. data/bundler/{man → lib/bundler/man}/bundle-exec.1.ronn +0 -0
  32. data/bundler/{man → lib/bundler/man}/bundle-gem.1.ronn +0 -0
  33. data/bundler/{man → lib/bundler/man}/bundle-info.1.ronn +0 -0
  34. data/bundler/{man → lib/bundler/man}/bundle-init.1.ronn +0 -0
  35. data/bundler/{man → lib/bundler/man}/bundle-inject.1.ronn +0 -0
  36. data/bundler/{man → lib/bundler/man}/bundle-install.1.ronn +1 -1
  37. data/bundler/{man → lib/bundler/man}/bundle-list.1.ronn +0 -0
  38. data/bundler/{man → lib/bundler/man}/bundle-lock.1.ronn +0 -0
  39. data/bundler/{man → lib/bundler/man}/bundle-open.1.ronn +0 -0
  40. data/bundler/{man → lib/bundler/man}/bundle-outdated.1.ronn +0 -0
  41. data/bundler/{man → lib/bundler/man}/bundle-platform.1.ronn +0 -0
  42. data/bundler/{man → lib/bundler/man}/bundle-pristine.1.ronn +0 -0
  43. data/bundler/{man → lib/bundler/man}/bundle-remove.1.ronn +0 -0
  44. data/bundler/{man → lib/bundler/man}/bundle-show.1.ronn +0 -0
  45. data/bundler/{man → lib/bundler/man}/bundle-update.1.ronn +0 -0
  46. data/bundler/{man → lib/bundler/man}/bundle-viz.1.ronn +0 -0
  47. data/bundler/{man → lib/bundler/man}/bundle.1.ronn +0 -0
  48. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +0 -0
  49. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  50. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  51. data/bundler/lib/bundler/resolver.rb +2 -3
  52. data/bundler/lib/bundler/rubygems_integration.rb +4 -0
  53. data/bundler/lib/bundler/settings.rb +0 -1
  54. data/bundler/lib/bundler/source/git/git_proxy.rb +1 -1
  55. data/bundler/lib/bundler/spec_set.rb +1 -0
  56. data/bundler/lib/bundler/templates/newgem/README.md.tt +0 -1
  57. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -2
  58. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -0
  59. data/bundler/lib/bundler/uri_credentials_filter.rb +2 -0
  60. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  61. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  62. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  63. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  64. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  65. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  66. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +4 -7
  67. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  68. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  69. data/bundler/lib/bundler/version.rb +1 -1
  70. data/bundler/man/bundle-add.1 +1 -1
  71. data/bundler/man/bundle-binstubs.1 +1 -1
  72. data/bundler/man/bundle-cache.1 +1 -1
  73. data/bundler/man/bundle-check.1 +1 -1
  74. data/bundler/man/bundle-clean.1 +1 -1
  75. data/bundler/man/bundle-config.1 +2 -5
  76. data/bundler/man/bundle-doctor.1 +1 -1
  77. data/bundler/man/bundle-exec.1 +1 -1
  78. data/bundler/man/bundle-gem.1 +1 -1
  79. data/bundler/man/bundle-info.1 +1 -1
  80. data/bundler/man/bundle-init.1 +1 -1
  81. data/bundler/man/bundle-inject.1 +1 -1
  82. data/bundler/man/bundle-install.1 +2 -2
  83. data/bundler/man/bundle-list.1 +1 -1
  84. data/bundler/man/bundle-lock.1 +1 -1
  85. data/bundler/man/bundle-open.1 +1 -1
  86. data/bundler/man/bundle-outdated.1 +1 -1
  87. data/bundler/man/bundle-platform.1 +1 -1
  88. data/bundler/man/bundle-pristine.1 +1 -1
  89. data/bundler/man/bundle-remove.1 +1 -1
  90. data/bundler/man/bundle-show.1 +1 -1
  91. data/bundler/man/bundle-update.1 +1 -1
  92. data/bundler/man/bundle-viz.1 +1 -1
  93. data/bundler/man/bundle.1 +1 -1
  94. data/bundler/man/gemfile.5 +1 -1
  95. data/bundler/man/index.txt +25 -0
  96. data/lib/rubygems.rb +6 -2
  97. data/lib/rubygems/available_set.rb +1 -1
  98. data/lib/rubygems/command_manager.rb +2 -2
  99. data/lib/rubygems/commands/build_command.rb +37 -20
  100. data/lib/rubygems/commands/cert_command.rb +1 -1
  101. data/lib/rubygems/commands/help_command.rb +2 -0
  102. data/lib/rubygems/commands/owner_command.rb +10 -2
  103. data/lib/rubygems/commands/pristine_command.rb +1 -1
  104. data/lib/rubygems/commands/push_command.rb +7 -3
  105. data/lib/rubygems/commands/query_command.rb +17 -0
  106. data/lib/rubygems/commands/server_command.rb +4 -0
  107. data/lib/rubygems/commands/setup_command.rb +25 -45
  108. data/lib/rubygems/commands/sources_command.rb +6 -2
  109. data/lib/rubygems/commands/specification_command.rb +6 -0
  110. data/lib/rubygems/commands/yank_command.rb +4 -4
  111. data/lib/rubygems/core_ext/kernel_require.rb +3 -0
  112. data/lib/rubygems/core_ext/kernel_warn.rb +6 -7
  113. data/lib/rubygems/defaults.rb +2 -2
  114. data/lib/rubygems/dependency.rb +1 -1
  115. data/lib/rubygems/dependency_installer.rb +4 -3
  116. data/lib/rubygems/ext/builder.rb +13 -32
  117. data/lib/rubygems/ext/cmake_builder.rb +4 -4
  118. data/lib/rubygems/ext/configure_builder.rb +4 -4
  119. data/lib/rubygems/ext/ext_conf_builder.rb +19 -14
  120. data/lib/rubygems/ext/rake_builder.rb +3 -3
  121. data/lib/rubygems/gemcutter_utilities.rb +90 -14
  122. data/lib/rubygems/indexer.rb +0 -1
  123. data/lib/rubygems/install_update_options.rb +2 -2
  124. data/lib/rubygems/installer.rb +12 -9
  125. data/lib/rubygems/installer_test_case.rb +7 -6
  126. data/lib/rubygems/name_tuple.rb +1 -1
  127. data/lib/rubygems/openssl.rb +4 -4
  128. data/lib/rubygems/package.rb +3 -2
  129. data/lib/rubygems/package/tar_header.rb +1 -1
  130. data/lib/rubygems/package/tar_test_case.rb +1 -1
  131. data/lib/rubygems/platform.rb +18 -7
  132. data/lib/rubygems/query_utils.rb +0 -9
  133. data/lib/rubygems/remote_fetcher.rb +1 -2
  134. data/lib/rubygems/request.rb +4 -3
  135. data/lib/rubygems/request_set/gem_dependency_api.rb +4 -4
  136. data/lib/rubygems/requirement.rb +1 -1
  137. data/lib/rubygems/resolver.rb +1 -1
  138. data/lib/rubygems/resolver/activation_request.rb +9 -1
  139. data/lib/rubygems/resolver/api_specification.rb +5 -1
  140. data/lib/rubygems/resolver/conflict.rb +1 -1
  141. data/lib/rubygems/resolver/dependency_request.rb +1 -1
  142. data/lib/rubygems/resolver/index_specification.rb +11 -0
  143. data/lib/rubygems/resolver/installer_set.rb +1 -2
  144. data/lib/rubygems/resolver/lock_set.rb +1 -1
  145. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  146. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  147. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  148. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  149. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  150. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  151. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  152. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  153. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  154. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  155. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  156. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  157. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  158. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  159. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  160. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  161. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  162. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  163. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  164. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  165. data/lib/rubygems/resolver/specification.rb +1 -1
  166. data/lib/rubygems/s3_uri_signer.rb +1 -1
  167. data/lib/rubygems/security.rb +1 -2
  168. data/lib/rubygems/security/policy.rb +1 -1
  169. data/lib/rubygems/security/signer.rb +1 -1
  170. data/lib/rubygems/server.rb +1 -1
  171. data/lib/rubygems/source.rb +10 -4
  172. data/lib/rubygems/spec_fetcher.rb +1 -1
  173. data/lib/rubygems/specification.rb +8 -8
  174. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  175. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  176. data/lib/rubygems/stub_specification.rb +1 -1
  177. data/lib/rubygems/test_case.rb +13 -26
  178. data/lib/rubygems/uri_formatter.rb +2 -1
  179. data/lib/rubygems/version_option.rb +6 -0
  180. data/rubygems-update.gemspec +1 -1
  181. data/test/rubygems/test_bundled_ca.rb +9 -5
  182. data/test/rubygems/test_gem.rb +3 -3
  183. data/test/rubygems/test_gem_commands_build_command.rb +197 -5
  184. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  185. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  186. data/test/rubygems/test_gem_commands_contents_command.rb +2 -2
  187. data/test/rubygems/test_gem_commands_help_command.rb +15 -2
  188. data/test/rubygems/test_gem_commands_install_command.rb +1 -1
  189. data/test/rubygems/test_gem_commands_owner_command.rb +49 -1
  190. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
  191. data/test/rubygems/test_gem_commands_push_command.rb +31 -5
  192. data/test/rubygems/test_gem_commands_query_command.rb +3 -3
  193. data/test/rubygems/test_gem_commands_setup_command.rb +13 -18
  194. data/test/rubygems/test_gem_commands_signin_command.rb +27 -3
  195. data/test/rubygems/test_gem_commands_sources_command.rb +60 -0
  196. data/test/rubygems/test_gem_commands_specification_command.rb +28 -0
  197. data/test/rubygems/test_gem_commands_update_command.rb +2 -2
  198. data/test/rubygems/test_gem_commands_yank_command.rb +31 -1
  199. data/test/rubygems/test_gem_dependency_installer.rb +36 -2
  200. data/test/rubygems/test_gem_dependency_list.rb +2 -2
  201. data/test/rubygems/test_gem_ext_builder.rb +10 -14
  202. data/test/rubygems/test_gem_ext_cmake_builder.rb +3 -9
  203. data/test/rubygems/test_gem_ext_configure_builder.rb +3 -9
  204. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -26
  205. data/test/rubygems/test_gem_ext_rake_builder.rb +5 -13
  206. data/test/rubygems/test_gem_gem_runner.rb +5 -4
  207. data/test/rubygems/test_gem_gemcutter_utilities.rb +3 -3
  208. data/test/rubygems/test_gem_install_update_options.rb +15 -3
  209. data/test/rubygems/test_gem_installer.rb +74 -11
  210. data/test/rubygems/test_gem_package.rb +8 -8
  211. data/test/rubygems/test_gem_package_old.rb +4 -4
  212. data/test/rubygems/test_gem_package_tar_writer.rb +1 -1
  213. data/test/rubygems/test_gem_platform.rb +63 -4
  214. data/test/rubygems/test_gem_remote_fetcher.rb +14 -18
  215. data/test/rubygems/test_gem_request.rb +2 -2
  216. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -4
  217. data/test/rubygems/test_gem_resolver_api_set.rb +8 -8
  218. data/test/rubygems/test_gem_resolver_conflict.rb +1 -1
  219. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -1
  220. data/test/rubygems/test_gem_security.rb +2 -2
  221. data/test/rubygems/test_gem_security_policy.rb +2 -2
  222. data/test/rubygems/test_gem_security_signer.rb +2 -2
  223. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  224. data/test/rubygems/test_gem_source.rb +5 -0
  225. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  226. data/test/rubygems/test_gem_specification.rb +5 -4
  227. data/test/rubygems/test_gem_uninstaller.rb +7 -7
  228. data/test/rubygems/test_gem_validator.rb +1 -1
  229. data/test/rubygems/test_gem_version_option.rb +1 -1
  230. data/test/rubygems/test_require.rb +50 -9
  231. metadata +35 -32
  232. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  233. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  234. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph'
2
+
3
+ require_relative 'dependency_graph'
3
4
 
4
5
  module Gem::Resolver::Molinillo
5
6
  # This class encapsulates a dependency resolver.
@@ -8,7 +9,7 @@ module Gem::Resolver::Molinillo
8
9
  #
9
10
  #
10
11
  class Resolver
11
- require 'rubygems/resolver/molinillo/lib/molinillo/resolution'
12
+ require_relative 'resolution'
12
13
 
13
14
  # @return [SpecificationProvider] the specification provider used
14
15
  # in the resolution process
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Gem::Resolver::Molinillo
3
4
  # A state that a {Resolution} can be in
4
5
  # @attr [String] name the name of the current requirement
@@ -7,7 +8,8 @@ module Gem::Resolver::Molinillo
7
8
  # @attr [Object] requirement the current requirement
8
9
  # @attr [Object] possibilities the possibilities to satisfy the current requirement
9
10
  # @attr [Integer] depth the depth of the resolution
10
- # @attr [Set<Object>] conflicts unresolved conflicts
11
+ # @attr [Hash] conflicts unresolved conflicts, indexed by dependency name
12
+ # @attr [Array<UnwindDetails>] unused_unwind_options unwinds for previous conflicts that weren't explored
11
13
  ResolutionState = Struct.new(
12
14
  :name,
13
15
  :requirements,
@@ -15,14 +17,15 @@ module Gem::Resolver::Molinillo
15
17
  :requirement,
16
18
  :possibilities,
17
19
  :depth,
18
- :conflicts
20
+ :conflicts,
21
+ :unused_unwind_options
19
22
  )
20
23
 
21
24
  class ResolutionState
22
25
  # Returns an empty resolution state
23
26
  # @return [ResolutionState] an empty state
24
27
  def self.empty
25
- new(nil, [], DependencyGraph.new, nil, nil, 0, Set.new)
28
+ new(nil, [], DependencyGraph.new, nil, nil, 0, {}, [])
26
29
  end
27
30
  end
28
31
 
@@ -40,7 +43,8 @@ module Gem::Resolver::Molinillo
40
43
  requirement,
41
44
  [possibilities.pop],
42
45
  depth + 1,
43
- conflicts.dup
46
+ conflicts.dup,
47
+ unused_unwind_options.dup
44
48
  ).tap do |state|
45
49
  state.activated.tag(state)
46
50
  end
@@ -104,7 +104,7 @@ class Gem::Resolver::Specification
104
104
  # Returns true if this specification is installable on this platform.
105
105
 
106
106
  def installable_platform?
107
- Gem::Platform.match spec.platform
107
+ Gem::Platform.match_spec? spec
108
108
  end
109
109
 
110
110
  def local? # :nodoc:
@@ -88,7 +88,7 @@ class Gem::S3URISigner
88
88
  "AWS4-HMAC-SHA256",
89
89
  date_time,
90
90
  credential_info,
91
- Digest::SHA256.hexdigest(canonical_request)
91
+ Digest::SHA256.hexdigest(canonical_request),
92
92
  ].join("\n")
93
93
  end
94
94
 
@@ -6,7 +6,6 @@
6
6
  #++
7
7
 
8
8
  require 'rubygems/exceptions'
9
- require 'fileutils'
10
9
  require_relative 'openssl'
11
10
 
12
11
  ##
@@ -592,7 +591,7 @@ module Gem::Security
592
591
 
593
592
  end
594
593
 
595
- if defined?(OpenSSL::SSL)
594
+ if Gem::HAVE_OPENSSL
596
595
  require 'rubygems/security/policy'
597
596
  require 'rubygems/security/policies'
598
597
  require 'rubygems/security/trust_dir'
@@ -194,7 +194,7 @@ class Gem::Security::Policy
194
194
  ("[Policy: %s - data: %p signer: %p chain: %p root: %p " +
195
195
  "signed-only: %p trusted-only: %p]") % [
196
196
  @name, @verify_chain, @verify_data, @verify_root, @verify_signer,
197
- @only_signed, @only_trusted,
197
+ @only_signed, @only_trusted
198
198
  ]
199
199
  end
200
200
 
@@ -34,7 +34,7 @@ class Gem::Security::Signer
34
34
  attr_reader :options
35
35
 
36
36
  DEFAULT_OPTIONS = {
37
- expiration_length_days: 365
37
+ expiration_length_days: 365,
38
38
  }.freeze
39
39
 
40
40
  ##
@@ -771,7 +771,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
771
771
  doc_items << {
772
772
  :name => base_name,
773
773
  :url => doc_root(new_path),
774
- :summary => ''
774
+ :summary => '',
775
775
  }
776
776
  end
777
777
 
@@ -79,7 +79,7 @@ class Gem::Source
79
79
  def dependency_resolver_set # :nodoc:
80
80
  return Gem::Resolver::IndexSet.new self if 'file' == uri.scheme
81
81
 
82
- bundler_api_uri = uri + './api/v1/dependencies'
82
+ bundler_api_uri = enforce_trailing_slash(uri) + './api/v1/dependencies'
83
83
 
84
84
  begin
85
85
  fetcher = Gem::RemoteFetcher.fetcher
@@ -130,7 +130,7 @@ class Gem::Source
130
130
 
131
131
  spec_file_name = name_tuple.spec_name
132
132
 
133
- source_uri = uri + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}"
133
+ source_uri = enforce_trailing_slash(uri) + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}"
134
134
 
135
135
  cache_dir = cache_dir source_uri
136
136
 
@@ -174,7 +174,7 @@ class Gem::Source
174
174
  file = FILES[type]
175
175
  fetcher = Gem::RemoteFetcher.fetcher
176
176
  file_name = "#{file}.#{Gem.marshal_version}"
177
- spec_path = uri + "#{file_name}.gz"
177
+ spec_path = enforce_trailing_slash(uri) + "#{file_name}.gz"
178
178
  cache_dir = cache_dir spec_path
179
179
  local_file = File.join(cache_dir, file_name)
180
180
  retried = false
@@ -223,7 +223,13 @@ class Gem::Source
223
223
 
224
224
  def typo_squatting?(host, distance_threshold=4)
225
225
  return if @uri.host.nil?
226
- levenshtein_distance(@uri.host, host) <= distance_threshold
226
+ levenshtein_distance(@uri.host, host).between? 1, distance_threshold
227
+ end
228
+
229
+ private
230
+
231
+ def enforce_trailing_slash(uri)
232
+ uri.merge(uri.path.gsub(/\/+$/, '') + '/')
227
233
  end
228
234
  end
229
235
 
@@ -98,7 +98,7 @@ class Gem::SpecFetcher
98
98
 
99
99
  found[source] = specs.select do |tup|
100
100
  if dependency.match?(tup)
101
- if matching_platform and !Gem::Platform.match(tup.platform)
101
+ if matching_platform and !Gem::Platform.match_gem?(tup.platform, tup.name)
102
102
  pm = (
103
103
  rejected_specs[dependency] ||= \
104
104
  Gem::PlatformMismatch.new(tup.name, tup.version))
@@ -77,18 +77,18 @@ class Gem::Specification < Gem::BasicSpecification
77
77
  -1 => ['(RubyGems versions up to and including 0.7 did not have versioned specifications)'],
78
78
  1 => [
79
79
  'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
80
- '"test_file=x" is a shortcut for "test_files=[x]"'
80
+ '"test_file=x" is a shortcut for "test_files=[x]"',
81
81
  ],
82
82
  2 => [
83
83
  'Added "required_rubygems_version"',
84
84
  'Now forward-compatible with future versions',
85
85
  ],
86
86
  3 => [
87
- 'Added Fixnum validation to the specification_version'
87
+ 'Added Fixnum validation to the specification_version',
88
88
  ],
89
89
  4 => [
90
- 'Added sandboxed freeform metadata to the specification version.'
91
- ]
90
+ 'Added sandboxed freeform metadata to the specification version.',
91
+ ],
92
92
  }.freeze
93
93
 
94
94
  MARSHAL_FIELDS = { # :nodoc:
@@ -804,7 +804,7 @@ class Gem::Specification < Gem::BasicSpecification
804
804
  stubs = stubs.uniq {|stub| stub.full_name }
805
805
 
806
806
  _resort!(stubs)
807
- @@stubs_by_name = stubs.select {|s| Gem::Platform.match s.platform }.group_by(&:name)
807
+ @@stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
808
808
  stubs
809
809
  end
810
810
  end
@@ -831,7 +831,7 @@ class Gem::Specification < Gem::BasicSpecification
831
831
  @@stubs_by_name[name]
832
832
  else
833
833
  pattern = "#{name}-*.gemspec"
834
- stubs = installed_stubs(dirs, pattern).select {|s| Gem::Platform.match s.platform } + default_stubs(pattern)
834
+ stubs = installed_stubs(dirs, pattern).select {|s| Gem::Platform.match_spec? s } + default_stubs(pattern)
835
835
  stubs = stubs.uniq {|stub| stub.full_name }.group_by(&:name)
836
836
  stubs.each_value {|v| _resort!(v) }
837
837
 
@@ -1344,7 +1344,7 @@ class Gem::Specification < Gem::BasicSpecification
1344
1344
  true, # has_rdoc
1345
1345
  @new_platform,
1346
1346
  @licenses,
1347
- @metadata
1347
+ @metadata,
1348
1348
  ]
1349
1349
  end
1350
1350
 
@@ -2450,7 +2450,7 @@ class Gem::Specification < Gem::BasicSpecification
2450
2450
  :version,
2451
2451
  :has_rdoc,
2452
2452
  :default_executable,
2453
- :metadata
2453
+ :metadata,
2454
2454
  ]
2455
2455
 
2456
2456
  @@attributes.each do |attr_name|
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
3
+ A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
4
+ Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
5
+ MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
6
+ A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
7
+ hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
8
+ RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
9
+ gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
10
+ KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
11
+ QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
12
+ XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
13
+ DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
14
+ LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
15
+ RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
16
+ jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
17
+ 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
18
+ mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
19
+ Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
20
+ WD9f
21
+ -----END CERTIFICATE-----
@@ -29,7 +29,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
29
29
  # in their require paths, so lets take advantage of that by pre-allocating
30
30
  # a require path list for that case.
31
31
  REQUIRE_PATH_LIST = { # :nodoc:
32
- 'lib' => ['lib'].freeze
32
+ 'lib' => ['lib'].freeze,
33
33
  }.freeze
34
34
 
35
35
  def initialize(data, extensions)
@@ -252,14 +252,14 @@ class Gem::TestCase < Minitest::Test
252
252
  msg = message(msg) do
253
253
  'Expected output containing make command "%s": %s' % [
254
254
  ('%s %s' % [make_command, target]).rstrip,
255
- output.inspect
255
+ output.inspect,
256
256
  ]
257
257
  end
258
258
  else
259
259
  msg = message(msg) do
260
260
  'Expected make command "%s": %s' % [
261
261
  ('%s %s' % [make_command, target]).rstrip,
262
- output.inspect
262
+ output.inspect,
263
263
  ]
264
264
  end
265
265
  end
@@ -335,6 +335,7 @@ class Gem::TestCase < Minitest::Test
335
335
  @git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
336
336
 
337
337
  Gem.ensure_gem_subdirectories @gemhome
338
+ Gem.ensure_default_gem_subdirectories @gemhome
338
339
 
339
340
  @orig_LOAD_PATH = $LOAD_PATH.dup
340
341
  $LOAD_PATH.map! do |s|
@@ -360,26 +361,23 @@ class Gem::TestCase < Minitest::Test
360
361
  Gem.send :remove_instance_variable, :@ruby_version if
361
362
  Gem.instance_variables.include? :@ruby_version
362
363
 
363
- FileUtils.mkdir_p @gemhome
364
364
  FileUtils.mkdir_p @userhome
365
365
 
366
366
  ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
367
367
 
368
- @default_dir = File.join @tempdir, 'default'
369
- @default_spec_dir = File.join @default_dir, "specifications", "default"
370
368
  if Gem.java_platform?
371
369
  @orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
372
- RbConfig::CONFIG['default_gem_home'] = @default_dir
370
+ RbConfig::CONFIG['default_gem_home'] = @gemhome
373
371
  else
374
- Gem.instance_variable_set(:@default_dir, @default_dir)
372
+ Gem.instance_variable_set(:@default_dir, @gemhome)
375
373
  end
376
- FileUtils.mkdir_p @default_spec_dir
374
+
375
+ @orig_bindir = RbConfig::CONFIG["bindir"]
376
+ RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
377
377
 
378
378
  Gem::Specification.unresolved_deps.clear
379
379
  Gem.use_paths(@gemhome)
380
380
 
381
- Gem::Security.reset
382
-
383
381
  Gem.loaded_specs.clear
384
382
  Gem.instance_variable_set(:@activated_gem_paths, 0)
385
383
  Gem.clear_default_specs
@@ -448,6 +446,8 @@ class Gem::TestCase < Minitest::Test
448
446
 
449
447
  Gem.ruby = @orig_ruby if @orig_ruby
450
448
 
449
+ RbConfig::CONFIG['bindir'] = @orig_bindir
450
+
451
451
  if Gem.java_platform?
452
452
  RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
453
453
  else
@@ -741,7 +741,7 @@ class Gem::TestCase < Minitest::Test
741
741
 
742
742
  def install_specs(*specs)
743
743
  specs.each do |spec|
744
- Gem::Installer.for_spec(spec).install
744
+ Gem::Installer.for_spec(spec, :force => true).install
745
745
  end
746
746
 
747
747
  Gem.searcher = nil
@@ -751,19 +751,6 @@ class Gem::TestCase < Minitest::Test
751
751
  # Installs the provided default specs including writing the spec file
752
752
 
753
753
  def install_default_gems(*specs)
754
- install_default_specs(*specs)
755
-
756
- specs.each do |spec|
757
- File.open spec.loaded_from, 'w' do |io|
758
- io.write spec.to_ruby_for_cache
759
- end
760
- end
761
- end
762
-
763
- ##
764
- # Install the provided default specs
765
-
766
- def install_default_specs(*specs)
767
754
  specs.each do |spec|
768
755
  installer = Gem::Installer.for_spec(spec, :install_as_default => true)
769
756
  installer.install
@@ -792,7 +779,7 @@ class Gem::TestCase < Minitest::Test
792
779
  def new_default_spec(name, version, deps = nil, *files)
793
780
  spec = util_spec name, version, deps
794
781
 
795
- spec.loaded_from = File.join(@default_spec_dir, spec.spec_name)
782
+ spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
796
783
  spec.files = files
797
784
 
798
785
  lib_dir = File.join(@tempdir, "default_gems", "lib")
@@ -1517,7 +1504,7 @@ Also, a list:
1517
1504
  PRIVATE_KEY = nil
1518
1505
  PUBLIC_KEY = nil
1519
1506
  PUBLIC_CERT = nil
1520
- end if defined?(OpenSSL::SSL)
1507
+ end if Gem::HAVE_OPENSSL
1521
1508
  end
1522
1509
 
1523
1510
  require 'rubygems/test_utilities'
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require 'cgi'
3
2
 
4
3
  ##
5
4
  # The UriFormatter handles URIs from user-input and escaping.
@@ -18,6 +17,8 @@ class Gem::UriFormatter
18
17
  # Creates a new URI formatter for +uri+.
19
18
 
20
19
  def initialize(uri)
20
+ require 'cgi'
21
+
21
22
  @uri = uri
22
23
  end
23
24
 
@@ -73,4 +73,10 @@ module Gem::VersionOption
73
73
  end
74
74
  end
75
75
 
76
+ ##
77
+ # Extract platform given on the command line
78
+
79
+ def get_platform_from_requirements(requirements)
80
+ Gem.platforms[1].to_s if requirements.key? :added_platform
81
+ end
76
82
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rubygems-update"
5
- s.version = "3.2.0.rc.2"
5
+ s.version = "3.2.0"
6
6
  s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
7
7
  s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
8
8
 
@@ -3,7 +3,7 @@ require 'rubygems/test_case'
3
3
  require 'net/http'
4
4
  require 'rubygems/openssl'
5
5
 
6
- unless defined?(OpenSSL::SSL)
6
+ unless Gem::HAVE_OPENSSL
7
7
  warn 'Skipping bundled certificates tests. openssl not found.'
8
8
  end
9
9
 
@@ -46,11 +46,15 @@ class TestBundledCA < Gem::TestCase
46
46
  assert_https('rubygems.org')
47
47
  end
48
48
 
49
- def test_accessing_fastly
50
- assert_https('rubygems.global.ssl.fastly.net')
49
+ def test_accessing_www_rubygems
50
+ assert_https('www.rubygems.org')
51
+ end
52
+
53
+ def test_accessing_staging
54
+ assert_https('staging.rubygems.org')
51
55
  end
52
56
 
53
57
  def test_accessing_new_index
54
- assert_https('fastly.rubygems.org')
58
+ assert_https('index.rubygems.org')
55
59
  end
56
- end if defined?(OpenSSL::SSL)
60
+ end if Gem::HAVE_OPENSSL
@@ -164,7 +164,7 @@ class TestGem < Gem::TestCase
164
164
  :prog_mode => win_platform? ? 0410 : 0510,
165
165
  :data_mode => 0640,
166
166
  :wrappers => true,
167
- :format_executable => format_executable
167
+ :format_executable => format_executable,
168
168
  }
169
169
  Dir.chdir @tempdir do
170
170
  Dir.mkdir 'bin'
@@ -765,7 +765,7 @@ class TestGem < Gem::TestCase
765
765
 
766
766
  expected = [
767
767
  File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
768
- File.join(foo1.full_gem_path, discover_path)
768
+ File.join(foo1.full_gem_path, discover_path),
769
769
  ].sort
770
770
 
771
771
  assert_equal expected, Gem.find_files('sff/discover').sort
@@ -1532,7 +1532,7 @@ class TestGem < Gem::TestCase
1532
1532
 
1533
1533
  tests = [
1534
1534
  [:dir0, [ Gem.dir, Gem.user_dir], m0],
1535
- [:dir1, [ Gem.user_dir, Gem.dir], m1]
1535
+ [:dir1, [ Gem.user_dir, Gem.dir], m1],
1536
1536
  ]
1537
1537
 
1538
1538
  tests.each do |_name, _paths, expected|