rubygems-update 3.2.0.rc.2 → 3.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +520 -501
  3. data/Manifest.txt +62 -55
  4. data/POLICIES.md +4 -3
  5. data/Rakefile +23 -7
  6. data/bundler/CHANGELOG.md +84 -19
  7. data/bundler/UPGRADING.md +1 -1
  8. data/bundler/bundler.gemspec +1 -1
  9. data/bundler/lib/bundler.rb +11 -0
  10. data/bundler/lib/bundler/build_metadata.rb +2 -2
  11. data/bundler/lib/bundler/cli.rb +5 -5
  12. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  13. data/bundler/lib/bundler/cli/exec.rb +3 -3
  14. data/bundler/lib/bundler/cli/install.rb +14 -5
  15. data/bundler/lib/bundler/cli/outdated.rb +0 -2
  16. data/bundler/lib/bundler/cli/update.rb +1 -1
  17. data/bundler/lib/bundler/compact_index_client/cache.rb +5 -13
  18. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  19. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  20. data/bundler/lib/bundler/definition.rb +23 -25
  21. data/bundler/lib/bundler/dependency.rb +3 -1
  22. data/bundler/lib/bundler/env.rb +1 -1
  23. data/bundler/lib/bundler/feature_flag.rb +0 -1
  24. data/bundler/lib/bundler/fetcher/index.rb +2 -3
  25. data/bundler/lib/bundler/friendly_errors.rb +15 -0
  26. data/bundler/lib/bundler/gem_helpers.rb +30 -24
  27. data/bundler/lib/bundler/index.rb +5 -1
  28. data/bundler/lib/bundler/injector.rb +9 -2
  29. data/bundler/lib/bundler/installer.rb +7 -5
  30. data/bundler/lib/bundler/lazy_specification.rb +20 -9
  31. data/bundler/lib/bundler/man/.document +1 -0
  32. data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
  33. data/bundler/{man → lib/bundler/man}/bundle-add.1.ronn +0 -0
  34. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +1 -1
  35. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1.ronn +0 -0
  36. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
  37. data/bundler/{man → lib/bundler/man}/bundle-cache.1.ronn +0 -0
  38. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  39. data/bundler/{man → lib/bundler/man}/bundle-check.1.ronn +0 -0
  40. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  41. data/bundler/{man → lib/bundler/man}/bundle-clean.1.ronn +0 -0
  42. data/bundler/{man → lib/bundler/man}/bundle-config.1 +2 -5
  43. data/bundler/{man → lib/bundler/man}/bundle-config.1.ronn +1 -9
  44. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  45. data/bundler/{man → lib/bundler/man}/bundle-doctor.1.ronn +0 -0
  46. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
  47. data/bundler/{man → lib/bundler/man}/bundle-exec.1.ronn +0 -0
  48. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +1 -1
  49. data/bundler/{man → lib/bundler/man}/bundle-gem.1.ronn +0 -0
  50. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  51. data/bundler/{man → lib/bundler/man}/bundle-info.1.ronn +0 -0
  52. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  53. data/bundler/{man → lib/bundler/man}/bundle-init.1.ronn +0 -0
  54. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  55. data/bundler/{man → lib/bundler/man}/bundle-inject.1.ronn +0 -0
  56. data/bundler/{man → lib/bundler/man}/bundle-install.1 +2 -2
  57. data/bundler/{man → lib/bundler/man}/bundle-install.1.ronn +1 -1
  58. data/bundler/{man → lib/bundler/man}/bundle-list.1 +1 -1
  59. data/bundler/{man → lib/bundler/man}/bundle-list.1.ronn +0 -0
  60. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  61. data/bundler/{man → lib/bundler/man}/bundle-lock.1.ronn +0 -0
  62. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  63. data/bundler/{man → lib/bundler/man}/bundle-open.1.ronn +0 -0
  64. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  65. data/bundler/{man → lib/bundler/man}/bundle-outdated.1.ronn +0 -0
  66. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  67. data/bundler/{man → lib/bundler/man}/bundle-platform.1.ronn +0 -0
  68. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  69. data/bundler/{man → lib/bundler/man}/bundle-pristine.1.ronn +0 -0
  70. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  71. data/bundler/{man → lib/bundler/man}/bundle-remove.1.ronn +0 -0
  72. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  73. data/bundler/{man → lib/bundler/man}/bundle-show.1.ronn +0 -0
  74. data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
  75. data/bundler/{man → lib/bundler/man}/bundle-update.1.ronn +0 -0
  76. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  77. data/bundler/{man → lib/bundler/man}/bundle-viz.1.ronn +0 -0
  78. data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
  79. data/bundler/{man → lib/bundler/man}/bundle.1.ronn +0 -0
  80. data/bundler/{man → lib/bundler/man}/gemfile.5 +1 -1
  81. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +0 -0
  82. data/bundler/lib/bundler/man/index.txt +25 -0
  83. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  84. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  85. data/bundler/lib/bundler/resolver.rb +25 -29
  86. data/bundler/lib/bundler/resolver/spec_group.rb +19 -25
  87. data/bundler/lib/bundler/rubygems_integration.rb +4 -6
  88. data/bundler/lib/bundler/settings.rb +0 -1
  89. data/bundler/lib/bundler/source/git/git_proxy.rb +28 -41
  90. data/bundler/lib/bundler/spec_set.rb +6 -8
  91. data/bundler/lib/bundler/stub_specification.rb +0 -2
  92. data/bundler/lib/bundler/templates/newgem/README.md.tt +0 -1
  93. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -2
  94. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -0
  95. data/bundler/lib/bundler/uri_credentials_filter.rb +2 -0
  96. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  97. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  98. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  99. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  100. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  101. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  102. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +12 -8
  103. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  104. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  105. data/bundler/lib/bundler/version.rb +1 -1
  106. data/lib/rubygems.rb +6 -2
  107. data/lib/rubygems/available_set.rb +1 -1
  108. data/lib/rubygems/command_manager.rb +2 -2
  109. data/lib/rubygems/commands/build_command.rb +37 -20
  110. data/lib/rubygems/commands/cert_command.rb +1 -1
  111. data/lib/rubygems/commands/help_command.rb +2 -0
  112. data/lib/rubygems/commands/owner_command.rb +10 -3
  113. data/lib/rubygems/commands/pristine_command.rb +1 -1
  114. data/lib/rubygems/commands/push_command.rb +7 -4
  115. data/lib/rubygems/commands/query_command.rb +17 -0
  116. data/lib/rubygems/commands/server_command.rb +4 -0
  117. data/lib/rubygems/commands/setup_command.rb +26 -90
  118. data/lib/rubygems/commands/sources_command.rb +6 -2
  119. data/lib/rubygems/commands/specification_command.rb +6 -0
  120. data/lib/rubygems/commands/yank_command.rb +4 -5
  121. data/lib/rubygems/core_ext/kernel_require.rb +3 -0
  122. data/lib/rubygems/core_ext/kernel_warn.rb +6 -7
  123. data/lib/rubygems/defaults.rb +2 -2
  124. data/lib/rubygems/dependency.rb +1 -1
  125. data/lib/rubygems/dependency_installer.rb +5 -3
  126. data/lib/rubygems/ext/builder.rb +16 -35
  127. data/lib/rubygems/ext/cmake_builder.rb +5 -6
  128. data/lib/rubygems/ext/configure_builder.rb +5 -6
  129. data/lib/rubygems/ext/ext_conf_builder.rb +19 -14
  130. data/lib/rubygems/ext/rake_builder.rb +4 -4
  131. data/lib/rubygems/gemcutter_utilities.rb +101 -20
  132. data/lib/rubygems/indexer.rb +0 -1
  133. data/lib/rubygems/install_update_options.rb +2 -2
  134. data/lib/rubygems/installer.rb +12 -32
  135. data/lib/rubygems/installer_test_case.rb +7 -6
  136. data/lib/rubygems/name_tuple.rb +1 -1
  137. data/lib/rubygems/openssl.rb +4 -4
  138. data/lib/rubygems/package.rb +3 -2
  139. data/lib/rubygems/package/tar_header.rb +1 -1
  140. data/lib/rubygems/package/tar_test_case.rb +1 -1
  141. data/lib/rubygems/platform.rb +18 -7
  142. data/lib/rubygems/query_utils.rb +0 -9
  143. data/lib/rubygems/remote_fetcher.rb +5 -4
  144. data/lib/rubygems/request.rb +4 -3
  145. data/lib/rubygems/request_set.rb +2 -13
  146. data/lib/rubygems/request_set/gem_dependency_api.rb +4 -4
  147. data/lib/rubygems/requirement.rb +1 -1
  148. data/lib/rubygems/resolver.rb +7 -2
  149. data/lib/rubygems/resolver/activation_request.rb +9 -1
  150. data/lib/rubygems/resolver/api_set.rb +29 -20
  151. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  152. data/lib/rubygems/resolver/api_specification.rb +8 -3
  153. data/lib/rubygems/resolver/best_set.rb +2 -2
  154. data/lib/rubygems/resolver/conflict.rb +1 -1
  155. data/lib/rubygems/resolver/dependency_request.rb +1 -1
  156. data/lib/rubygems/resolver/index_specification.rb +29 -0
  157. data/lib/rubygems/resolver/installer_set.rb +58 -9
  158. data/lib/rubygems/resolver/lock_set.rb +1 -1
  159. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  160. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  161. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  162. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  163. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  164. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  165. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  166. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  167. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  168. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  169. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  170. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  171. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  172. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  173. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  174. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  175. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  176. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  177. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  178. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  179. data/lib/rubygems/resolver/spec_specification.rb +14 -0
  180. data/lib/rubygems/resolver/specification.rb +13 -1
  181. data/lib/rubygems/s3_uri_signer.rb +1 -1
  182. data/lib/rubygems/security.rb +1 -2
  183. data/lib/rubygems/security/policy.rb +1 -1
  184. data/lib/rubygems/security/signer.rb +1 -1
  185. data/lib/rubygems/server.rb +7 -2
  186. data/lib/rubygems/source.rb +20 -9
  187. data/lib/rubygems/spec_fetcher.rb +1 -1
  188. data/lib/rubygems/specification.rb +8 -8
  189. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  190. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  191. data/lib/rubygems/stub_specification.rb +1 -1
  192. data/lib/rubygems/test_case.rb +14 -27
  193. data/lib/rubygems/test_utilities.rb +6 -5
  194. data/lib/rubygems/uri_formatter.rb +2 -1
  195. data/lib/rubygems/version_option.rb +6 -0
  196. data/rubygems-update.gemspec +2 -2
  197. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  198. data/test/rubygems/test_bundled_ca.rb +9 -5
  199. data/test/rubygems/test_gem.rb +3 -3
  200. data/test/rubygems/test_gem_commands_build_command.rb +197 -5
  201. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  202. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  203. data/test/rubygems/test_gem_commands_contents_command.rb +2 -2
  204. data/test/rubygems/test_gem_commands_help_command.rb +15 -2
  205. data/test/rubygems/test_gem_commands_install_command.rb +132 -1
  206. data/test/rubygems/test_gem_commands_owner_command.rb +49 -1
  207. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
  208. data/test/rubygems/test_gem_commands_push_command.rb +70 -5
  209. data/test/rubygems/test_gem_commands_query_command.rb +3 -3
  210. data/test/rubygems/test_gem_commands_setup_command.rb +20 -48
  211. data/test/rubygems/test_gem_commands_signin_command.rb +27 -3
  212. data/test/rubygems/test_gem_commands_sources_command.rb +60 -0
  213. data/test/rubygems/test_gem_commands_specification_command.rb +28 -0
  214. data/test/rubygems/test_gem_commands_update_command.rb +2 -2
  215. data/test/rubygems/test_gem_commands_yank_command.rb +31 -1
  216. data/test/rubygems/test_gem_dependency_installer.rb +63 -49
  217. data/test/rubygems/test_gem_dependency_list.rb +2 -2
  218. data/test/rubygems/test_gem_ext_builder.rb +16 -20
  219. data/test/rubygems/test_gem_ext_cmake_builder.rb +5 -13
  220. data/test/rubygems/test_gem_ext_configure_builder.rb +5 -11
  221. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -26
  222. data/test/rubygems/test_gem_ext_rake_builder.rb +30 -13
  223. data/test/rubygems/test_gem_gem_runner.rb +5 -4
  224. data/test/rubygems/test_gem_gemcutter_utilities.rb +3 -3
  225. data/test/rubygems/test_gem_install_update_options.rb +15 -3
  226. data/test/rubygems/test_gem_installer.rb +80 -71
  227. data/test/rubygems/test_gem_package.rb +8 -8
  228. data/test/rubygems/test_gem_package_old.rb +4 -4
  229. data/test/rubygems/test_gem_package_tar_writer.rb +1 -1
  230. data/test/rubygems/test_gem_platform.rb +63 -4
  231. data/test/rubygems/test_gem_remote_fetcher.rb +15 -19
  232. data/test/rubygems/test_gem_request.rb +2 -2
  233. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -4
  234. data/test/rubygems/test_gem_resolver_api_set.rb +58 -55
  235. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -3
  236. data/test/rubygems/test_gem_resolver_best_set.rb +26 -3
  237. data/test/rubygems/test_gem_resolver_conflict.rb +1 -1
  238. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -1
  239. data/test/rubygems/test_gem_security.rb +2 -2
  240. data/test/rubygems/test_gem_security_policy.rb +2 -2
  241. data/test/rubygems/test_gem_security_signer.rb +2 -2
  242. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  243. data/test/rubygems/test_gem_source.rb +7 -2
  244. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  245. data/test/rubygems/test_gem_specification.rb +6 -7
  246. data/test/rubygems/test_gem_uninstaller.rb +7 -7
  247. data/test/rubygems/test_gem_validator.rb +1 -1
  248. data/test/rubygems/test_gem_version_option.rb +1 -1
  249. data/test/rubygems/test_require.rb +50 -9
  250. data/test/test_changelog_generator.rb +17 -0
  251. metadata +69 -86
  252. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  253. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  254. 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
@@ -22,6 +22,20 @@ class Gem::Resolver::SpecSpecification < Gem::Resolver::Specification
22
22
  spec.dependencies
23
23
  end
24
24
 
25
+ ##
26
+ # The required_ruby_version constraint for this specification
27
+
28
+ def required_ruby_version
29
+ spec.required_ruby_version
30
+ end
31
+
32
+ ##
33
+ # The required_rubygems_version constraint for this specification
34
+
35
+ def required_rubygems_version
36
+ spec.required_rubygems_version
37
+ end
38
+
25
39
  ##
26
40
  # The name and version of the specification.
27
41
  #
@@ -43,6 +43,16 @@ class Gem::Resolver::Specification
43
43
 
44
44
  attr_reader :version
45
45
 
46
+ ##
47
+ # The required_ruby_version constraint for this specification.
48
+
49
+ attr_reader :required_ruby_version
50
+
51
+ ##
52
+ # The required_ruby_version constraint for this specification.
53
+
54
+ attr_reader :required_rubygems_version
55
+
46
56
  ##
47
57
  # Sets default instance variables for the specification.
48
58
 
@@ -53,6 +63,8 @@ class Gem::Resolver::Specification
53
63
  @set = nil
54
64
  @source = nil
55
65
  @version = nil
66
+ @required_ruby_version = Gem::Requirement.default
67
+ @required_rubygems_version = Gem::Requirement.default
56
68
  end
57
69
 
58
70
  ##
@@ -104,7 +116,7 @@ class Gem::Resolver::Specification
104
116
  # Returns true if this specification is installable on this platform.
105
117
 
106
118
  def installable_platform?
107
- Gem::Platform.match spec.platform
119
+ Gem::Platform.match_spec? spec
108
120
  end
109
121
 
110
122
  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
  ##
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require 'webrick'
3
2
  require 'zlib'
4
3
  require 'erb'
5
4
  require 'uri'
@@ -429,6 +428,12 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
429
428
  end
430
429
 
431
430
  def initialize(gem_dirs, port, daemon, launch = nil, addresses = nil)
431
+ begin
432
+ require 'webrick'
433
+ rescue LoadError
434
+ abort "webrick is not found. You may need to `gem install webrick` to install webrick."
435
+ end
436
+
432
437
  Gem::RDoc.load_rdoc
433
438
  Socket.do_not_reverse_lookup = true
434
439
 
@@ -771,7 +776,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
771
776
  doc_items << {
772
777
  :name => base_name,
773
778
  :url => doc_root(new_path),
774
- :summary => ''
779
+ :summary => '',
775
780
  }
776
781
  end
777
782
 
@@ -79,7 +79,15 @@ 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
+ fetch_uri = if uri.host == "rubygems.org"
83
+ index_uri = uri.dup
84
+ index_uri.host = "index.rubygems.org"
85
+ index_uri
86
+ else
87
+ uri
88
+ end
89
+
90
+ bundler_api_uri = enforce_trailing_slash(fetch_uri)
83
91
 
84
92
  begin
85
93
  fetcher = Gem::RemoteFetcher.fetcher
@@ -87,11 +95,7 @@ class Gem::Source
87
95
  rescue Gem::RemoteFetcher::FetchError
88
96
  Gem::Resolver::IndexSet.new self
89
97
  else
90
- if response.respond_to? :uri
91
- Gem::Resolver::APISet.new response.uri
92
- else
93
- Gem::Resolver::APISet.new bundler_api_uri
94
- end
98
+ Gem::Resolver::APISet.new response.uri + "./info/"
95
99
  end
96
100
  end
97
101
 
@@ -130,7 +134,7 @@ class Gem::Source
130
134
 
131
135
  spec_file_name = name_tuple.spec_name
132
136
 
133
- source_uri = uri + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}"
137
+ source_uri = enforce_trailing_slash(uri) + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}"
134
138
 
135
139
  cache_dir = cache_dir source_uri
136
140
 
@@ -148,6 +152,7 @@ class Gem::Source
148
152
  spec = Gem::Util.inflate spec
149
153
 
150
154
  if update_cache?
155
+ require "fileutils"
151
156
  FileUtils.mkdir_p cache_dir
152
157
 
153
158
  File.open local_spec, 'wb' do |io|
@@ -174,7 +179,7 @@ class Gem::Source
174
179
  file = FILES[type]
175
180
  fetcher = Gem::RemoteFetcher.fetcher
176
181
  file_name = "#{file}.#{Gem.marshal_version}"
177
- spec_path = uri + "#{file_name}.gz"
182
+ spec_path = enforce_trailing_slash(uri) + "#{file_name}.gz"
178
183
  cache_dir = cache_dir spec_path
179
184
  local_file = File.join(cache_dir, file_name)
180
185
  retried = false
@@ -223,7 +228,13 @@ class Gem::Source
223
228
 
224
229
  def typo_squatting?(host, distance_threshold=4)
225
230
  return if @uri.host.nil?
226
- levenshtein_distance(@uri.host, host) <= distance_threshold
231
+ levenshtein_distance(@uri.host, host).between? 1, distance_threshold
232
+ end
233
+
234
+ private
235
+
236
+ def enforce_trailing_slash(uri)
237
+ uri.merge(uri.path.gsub(/\/+$/, '') + '/')
227
238
  end
228
239
  end
229
240
 
@@ -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)
@@ -250,16 +250,16 @@ class Gem::TestCase < Minitest::Test
250
250
  def assert_contains_make_command(target, output, msg = nil)
251
251
  if output.match(/\n/)
252
252
  msg = message(msg) do
253
- 'Expected output containing make command "%s": %s' % [
253
+ "Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
254
254
  ('%s %s' % [make_command, target]).rstrip,
255
- output.inspect
255
+ output,
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,
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'