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
@@ -39,7 +39,7 @@ class TestGemResolverAPISpecification < Gem::TestCase
39
39
 
40
40
  rails = specs['rails-3.0.3']
41
41
 
42
- repo = @gem_repo + 'api/v1/dependencies'
42
+ repo = @gem_repo + 'info'
43
43
 
44
44
  set = Gem::Resolver::APISet.new repo
45
45
 
@@ -123,7 +123,7 @@ class TestGemResolverAPISpecification < Gem::TestCase
123
123
  fetcher.spec 'a', 1
124
124
  end
125
125
 
126
- dep_uri = URI(@gem_repo) + 'api/v1/dependencies'
126
+ dep_uri = URI(@gem_repo) + 'info'
127
127
  set = Gem::Resolver::APISet.new dep_uri
128
128
  data = {
129
129
  :name => 'a',
@@ -147,7 +147,7 @@ class TestGemResolverAPISpecification < Gem::TestCase
147
147
  end
148
148
  end
149
149
 
150
- dep_uri = URI(@gem_repo) + 'api/v1/dependencies'
150
+ dep_uri = URI(@gem_repo) + 'info'
151
151
  set = Gem::Resolver::APISet.new dep_uri
152
152
  data = {
153
153
  :name => 'j',
@@ -39,7 +39,7 @@ class TestGemResolverBestSet < Gem::TestCase
39
39
 
40
40
  set = @DR::BestSet.new
41
41
 
42
- api_uri = URI(@gem_repo) + './api/v1/dependencies'
42
+ api_uri = URI(@gem_repo)
43
43
 
44
44
  set.sets << Gem::Resolver::APISet.new(api_uri)
45
45
 
@@ -99,12 +99,12 @@ class TestGemResolverBestSet < Gem::TestCase
99
99
  def test_replace_failed_api_set
100
100
  set = @DR::BestSet.new
101
101
 
102
- api_uri = URI(@gem_repo) + './api/v1/dependencies'
102
+ api_uri = URI(@gem_repo) + './info/'
103
103
  api_set = Gem::Resolver::APISet.new api_uri
104
104
 
105
105
  set.sets << api_set
106
106
 
107
- error_uri = api_uri + '?gems=a'
107
+ error_uri = api_uri + 'a'
108
108
 
109
109
  error = Gem::RemoteFetcher::FetchError.new 'bogus', error_uri
110
110
 
@@ -132,4 +132,27 @@ class TestGemResolverBestSet < Gem::TestCase
132
132
 
133
133
  assert_equal error, e
134
134
  end
135
+
136
+ def test_replace_failed_api_set_uri_with_credentials
137
+ set = @DR::BestSet.new
138
+
139
+ api_uri = URI(@gem_repo) + './info/'
140
+ api_uri.user = 'user'
141
+ api_uri.password = 'pass'
142
+ api_set = Gem::Resolver::APISet.new api_uri
143
+
144
+ set.sets << api_set
145
+
146
+ error_uri = api_uri + 'a'
147
+
148
+ error = Gem::RemoteFetcher::FetchError.new 'bogus', error_uri
149
+
150
+ set.replace_failed_api_set error
151
+
152
+ assert_equal 1, set.sets.size
153
+
154
+ refute_includes set.sets, api_set
155
+
156
+ assert_kind_of Gem::Resolver::IndexSet, set.sets.first
157
+ end
135
158
  end
@@ -73,7 +73,7 @@ class TestGemResolverConflict < Gem::TestCase
73
73
 
74
74
  expected = [
75
75
  'net-ssh (>= 2.0.13), 2.2.2 activated',
76
- 'rye (= 0.9.8), 0.9.8 activated'
76
+ 'rye (= 0.9.8), 0.9.8 activated',
77
77
  ]
78
78
 
79
79
  assert_equal expected, conflict.request_path(child.requester)
@@ -51,7 +51,7 @@ class TestGemResolverVendorSet < Gem::TestCase
51
51
  source = Gem::Source::Vendor.new directory
52
52
 
53
53
  expected = [
54
- Gem::Resolver::VendorSpecification.new(@set, spec, source)
54
+ Gem::Resolver::VendorSpecification.new(@set, spec, source),
55
55
  ]
56
56
 
57
57
  assert_equal expected, found
@@ -2,7 +2,7 @@
2
2
  require 'rubygems/test_case'
3
3
  require 'rubygems/security'
4
4
 
5
- unless defined?(OpenSSL::SSL)
5
+ unless Gem::HAVE_OPENSSL
6
6
  warn 'Skipping Gem::Security tests. openssl not found.'
7
7
  end
8
8
 
@@ -309,4 +309,4 @@ class TestGemSecurity < Gem::TestCase
309
309
 
310
310
  assert_equal key.to_pem, key_from_file.to_pem
311
311
  end
312
- end if defined?(OpenSSL::SSL) && !Gem.java_platform?
312
+ end if Gem::HAVE_OPENSSL && !Gem.java_platform?
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rubygems/test_case'
4
4
 
5
- unless defined?(OpenSSL::SSL)
5
+ unless Gem::HAVE_OPENSSL
6
6
  warn 'Skipping Gem::Security::Policy tests. openssl not found.'
7
7
  end
8
8
 
@@ -532,4 +532,4 @@ class TestGemSecurityPolicy < Gem::TestCase
532
532
 
533
533
  return digests, signatures
534
534
  end
535
- end if defined?(OpenSSL::SSL)
535
+ end if Gem::HAVE_OPENSSL
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/test_case'
3
3
 
4
- unless defined?(OpenSSL::SSL)
4
+ unless Gem::HAVE_OPENSSL
5
5
  warn 'Skipping Gem::Security::Signer tests. openssl not found.'
6
6
  end
7
7
 
@@ -214,4 +214,4 @@ toqvglr0kdbknSRRjBVLK6tsgr07aLT9gNP7mTW2PA==
214
214
  signer.sign 'hello'
215
215
  end
216
216
  end
217
- end if defined?(OpenSSL::SSL)
217
+ end if Gem::HAVE_OPENSSL
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/test_case'
3
3
 
4
- unless defined?(OpenSSL::SSL)
4
+ unless Gem::HAVE_OPENSSL
5
5
  warn 'Skipping Gem::Security::TrustDir tests. openssl not found.'
6
6
  end
7
7
 
@@ -95,4 +95,4 @@ class TestGemSecurityTrustDir < Gem::TestCase
95
95
 
96
96
  assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
97
97
  end
98
- end if defined?(OpenSSL::SSL)
98
+ end if Gem::HAVE_OPENSSL
@@ -44,9 +44,9 @@ class TestGemSource < Gem::TestCase
44
44
 
45
45
  def test_dependency_resolver_set_bundler_api
46
46
  response = Net::HTTPResponse.new '1.1', 200, 'OK'
47
- response.uri = URI('http://example') if response.respond_to? :uri
47
+ response.uri = URI('http://example')
48
48
 
49
- @fetcher.data["#{@gem_repo}api/v1/dependencies"] = response
49
+ @fetcher.data[@gem_repo] = response
50
50
 
51
51
  set = @source.dependency_resolver_set
52
52
 
@@ -240,6 +240,11 @@ class TestGemSource < Gem::TestCase
240
240
  refute rubygems_source.typo_squatting?("rubysertgems.org")
241
241
  end
242
242
 
243
+ def test_typo_squatting_false_positive
244
+ rubygems_source = Gem::Source.new("https://rubygems.org")
245
+ refute rubygems_source.typo_squatting?("rubygems.org")
246
+ end
247
+
243
248
  def test_typo_squatting_custom_distance_threshold
244
249
  rubygems_source = Gem::Source.new("https://rubgems.org")
245
250
  distance_threshold = 5
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+ require 'rubygems/test_case'
3
+ require 'rubygems/source'
4
+
5
+ class TestGemSourceSubpathProblem < Gem::TestCase
6
+ def tuple(*args)
7
+ Gem::NameTuple.new(*args)
8
+ end
9
+
10
+ def setup
11
+ super
12
+
13
+ @gem_repo = "http://gems.example.com/private"
14
+
15
+ spec_fetcher
16
+
17
+ @source = Gem::Source.new(@gem_repo)
18
+
19
+ util_make_gems
20
+ end
21
+
22
+ def test_dependency_resolver_set
23
+ response = Net::HTTPResponse.new '1.1', 200, 'OK'
24
+ response.uri = URI('http://example')
25
+
26
+ @fetcher.data["#{@gem_repo}/"] = response
27
+
28
+ set = @source.dependency_resolver_set
29
+
30
+ assert_kind_of Gem::Resolver::APISet, set
31
+ end
32
+
33
+ def test_fetch_spec
34
+ @fetcher.data["#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] = Zlib::Deflate.deflate(Marshal.dump(@a1))
35
+
36
+ spec = @source.fetch_spec tuple('a', Gem::Version.new(1), 'ruby')
37
+ assert_equal @a1.full_name, spec.full_name
38
+ end
39
+
40
+ def test_load_specs
41
+ @fetcher.data["#{@gem_repo}/latest_specs.#{Gem.marshal_version}.gz"] = util_gzip(Marshal.dump([
42
+ Gem::NameTuple.new(@a1.name, @a1.version, 'ruby'),
43
+ Gem::NameTuple.new(@b2.name, @b2.version, 'ruby'),
44
+ ]))
45
+
46
+ released = @source.load_specs(:latest).map {|spec| spec.full_name }
47
+ assert_equal %W[a-1 b-2], released
48
+ end
49
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'benchmark'
3
3
  require 'rubygems/test_case'
4
+ require 'date'
4
5
  require 'pathname'
5
6
  require 'stringio'
6
7
  require 'rubygems/ext'
@@ -1199,10 +1200,8 @@ dependencies: []
1199
1200
  Gem.platforms = orig_platform
1200
1201
  end
1201
1202
 
1202
- DATA_PATH = File.expand_path "../data", __FILE__
1203
-
1204
1203
  def test_handles_private_null_type
1205
- path = File.join DATA_PATH, "null-type.gemspec.rz"
1204
+ path = File.expand_path "../data/null-type.gemspec.rz", __FILE__
1206
1205
 
1207
1206
  data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
1208
1207
 
@@ -1999,7 +1998,7 @@ dependencies: []
1999
1998
  test_cases = {
2000
1999
  'i386-mswin32' => 'a-1-x86-mswin32-60',
2001
2000
  'i386-mswin32_80' => 'a-1-x86-mswin32-80',
2002
- 'i386-mingw32' => 'a-1-x86-mingw32'
2001
+ 'i386-mingw32' => 'a-1-x86-mingw32',
2003
2002
  }
2004
2003
 
2005
2004
  test_cases.each do |arch, expected|
@@ -3035,7 +3034,7 @@ Please report a bug if this causes problems.
3035
3034
  specification.define_singleton_method(:find_all_by_name) do |dep_name|
3036
3035
  [
3037
3036
  specification.new {|s| s.name = "z", s.version = Gem::Version.new("1") },
3038
- specification.new {|s| s.name = "z", s.version = Gem::Version.new("2") }
3037
+ specification.new {|s| s.name = "z", s.version = Gem::Version.new("2") },
3039
3038
  ]
3040
3039
  end
3041
3040
 
@@ -3578,7 +3577,7 @@ Did you mean 'Ruby'?
3578
3577
  "one" => "two",
3579
3578
  "home" => "three",
3580
3579
  "homepage_uri" => "https://example.com/user/repo",
3581
- "funding_uri" => "https://example.com/donate"
3580
+ "funding_uri" => "https://example.com/donate",
3582
3581
  }
3583
3582
  end
3584
3583
 
@@ -3838,7 +3837,7 @@ end
3838
3837
 
3839
3838
  default_gem_spec = new_default_spec("default", "2.0.0.0",
3840
3839
  nil, "default/gem.rb")
3841
- spec_path = File.join(@default_spec_dir, default_gem_spec.spec_name)
3840
+ spec_path = File.join(@gemhome, "specifications", "default", default_gem_spec.spec_name)
3842
3841
  write_file(spec_path) do |file|
3843
3842
  file.print(default_gem_spec.to_ruby)
3844
3843
  end
@@ -177,7 +177,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
177
177
 
178
178
  @spec.files += %w[lib/rubygems_plugin.rb]
179
179
 
180
- Gem::Installer.at(Gem::Package.build(@spec)).install
180
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
181
181
 
182
182
  plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
183
183
  assert File.exist?(plugin_path), 'plugin not written'
@@ -194,7 +194,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
194
194
 
195
195
  @spec.files += %w[lib/rubygems_plugin.rb]
196
196
 
197
- Gem::Installer.at(Gem::Package.build(@spec)).install
197
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
198
198
 
199
199
  plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
200
200
  assert File.exist?(plugin_path), 'plugin not written'
@@ -212,7 +212,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
212
212
 
213
213
  @spec.files += %w[lib/rubygems_plugin.rb]
214
214
 
215
- Gem::Installer.at(Gem::Package.build(@spec)).install
215
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
216
216
 
217
217
  plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
218
218
  assert File.exist?(plugin_path), 'plugin not written'
@@ -314,7 +314,7 @@ create_makefile '#{@spec.name}'
314
314
  use_ui @ui do
315
315
  path = Gem::Package.build @spec
316
316
 
317
- installer = Gem::Installer.at path
317
+ installer = Gem::Installer.at path, :force => true
318
318
  installer.install
319
319
  end
320
320
 
@@ -633,19 +633,19 @@ create_makefile '#{@spec.name}'
633
633
  plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
634
634
 
635
635
  @spec.version = '1'
636
- Gem::Installer.at(Gem::Package.build(@spec)).install
636
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
637
637
 
638
638
  refute File.exist?(plugin_path), 'version without plugin installed, but plugin written'
639
639
 
640
640
  @spec.files += %w[lib/rubygems_plugin.rb]
641
641
  @spec.version = '2'
642
- Gem::Installer.at(Gem::Package.build(@spec)).install
642
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
643
643
 
644
644
  assert File.exist?(plugin_path), 'version with plugin installed, but plugin not written'
645
645
  assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
646
646
 
647
647
  @spec.version = '3'
648
- Gem::Installer.at(Gem::Package.build(@spec)).install
648
+ Gem::Installer.at(Gem::Package.build(@spec), :force => true).install
649
649
 
650
650
  assert File.exist?(plugin_path), 'version with plugin installed, but plugin removed'
651
651
  assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'old version installed, but plugin updated'
@@ -26,7 +26,7 @@ class TestGemValidator < Gem::TestCase
26
26
  @spec.file_name => [
27
27
  Gem::Validator::ErrorData.new('lib/b.rb', 'Missing file'),
28
28
  Gem::Validator::ErrorData.new('lib/c.rb', 'Extra file'),
29
- ]
29
+ ],
30
30
  }
31
31
 
32
32
  assert_equal expected, alien
@@ -56,7 +56,7 @@ class TestGemVersionOption < Gem::TestCase
56
56
  @cmd.handle_options %w[--platform ruby]
57
57
 
58
58
  expected = [
59
- Gem::Platform::RUBY
59
+ Gem::Platform::RUBY,
60
60
  ]
61
61
 
62
62
  assert_equal expected, Gem.platforms
@@ -120,7 +120,7 @@ class TestGemRequire < Gem::TestCase
120
120
  c1 = new_default_spec "c", "1", nil, "c/c.rb"
121
121
  c2 = new_default_spec "c", "2", nil, "c/c.rb"
122
122
 
123
- install_default_specs c1, c2, b1, a1
123
+ install_default_gems c1, c2, b1, a1
124
124
 
125
125
  dir = Dir.mktmpdir("test_require", @tempdir)
126
126
  dash_i_arg = File.join dir, 'lib'
@@ -405,8 +405,8 @@ class TestGemRequire < Gem::TestCase
405
405
 
406
406
  # Remove an old default gem version directly from disk as if someone ran
407
407
  # gem cleanup.
408
- FileUtils.rm_rf(File.join @default_dir, "#{b1.full_name}")
409
- FileUtils.rm_rf(File.join @default_spec_dir, "#{b1.full_name}.gemspec")
408
+ FileUtils.rm_rf(File.join @gemhome, "#{b1.full_name}")
409
+ FileUtils.rm_rf(File.join @gemhome, "specifications", "default", "#{b1.full_name}.gemspec")
410
410
 
411
411
  # Require gems that have not been removed.
412
412
  assert_require 'a/b'
@@ -433,7 +433,7 @@ class TestGemRequire < Gem::TestCase
433
433
  def test_default_gem_only
434
434
  default_gem_spec = new_default_spec("default", "2.0.0.0",
435
435
  nil, "default/gem.rb")
436
- install_default_specs(default_gem_spec)
436
+ install_default_gems(default_gem_spec)
437
437
  assert_require "default/gem"
438
438
  assert_equal %w[default-2.0.0.0], loaded_spec_names
439
439
  end
@@ -441,7 +441,7 @@ class TestGemRequire < Gem::TestCase
441
441
  def test_default_gem_require_activates_just_once
442
442
  default_gem_spec = new_default_spec("default", "2.0.0.0",
443
443
  nil, "default/gem.rb")
444
- install_default_specs(default_gem_spec)
444
+ install_default_gems(default_gem_spec)
445
445
 
446
446
  assert_require "default/gem"
447
447
 
@@ -506,7 +506,7 @@ class TestGemRequire < Gem::TestCase
506
506
  def test_default_gem_and_normal_gem
507
507
  default_gem_spec = new_default_spec("default", "2.0.0.0",
508
508
  nil, "default/gem.rb")
509
- install_default_specs(default_gem_spec)
509
+ install_default_gems(default_gem_spec)
510
510
  normal_gem_spec = util_spec("default", "3.0", nil,
511
511
  "lib/default/gem.rb")
512
512
  install_specs(normal_gem_spec)
@@ -544,11 +544,11 @@ class TestGemRequire < Gem::TestCase
544
544
  def test_default_gem_prerelease
545
545
  default_gem_spec = new_default_spec("default", "2.0.0",
546
546
  nil, "default/gem.rb")
547
- install_default_specs(default_gem_spec)
547
+ install_default_gems(default_gem_spec)
548
548
 
549
549
  normal_gem_higher_prerelease_spec = util_spec("default", "3.0.0.rc2", nil,
550
550
  "lib/default/gem.rb")
551
- install_default_specs(normal_gem_higher_prerelease_spec)
551
+ install_default_gems(normal_gem_higher_prerelease_spec)
552
552
 
553
553
  assert_require "default/gem"
554
554
  assert_equal %w[default-3.0.0.rc2], loaded_spec_names
@@ -586,7 +586,7 @@ class TestGemRequire < Gem::TestCase
586
586
  def test_require_when_gem_defined
587
587
  default_gem_spec = new_default_spec("default", "2.0.0.0",
588
588
  nil, "default/gem.rb")
589
- install_default_specs(default_gem_spec)
589
+ install_default_gems(default_gem_spec)
590
590
  c = Class.new do
591
591
  def self.gem(*args)
592
592
  raise "received #gem with #{args.inspect}"
@@ -677,6 +677,47 @@ class TestGemRequire < Gem::TestCase
677
677
  end
678
678
  end
679
679
  end
680
+
681
+ def test_no_crash_when_overriding_warn_with_warning_module
682
+ skip "https://github.com/oracle/truffleruby/issues/2109" if RUBY_ENGINE == "truffleruby"
683
+
684
+ Dir.mktmpdir("warn_test") do |dir|
685
+ File.write(dir + "/main.rb", "module Warning; def warn(str); super; end; end; warn 'Foo Bar'")
686
+ _, err = capture_subprocess_io do
687
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
688
+ end
689
+ assert_match(/Foo Bar\n$/, err)
690
+ _, err = capture_subprocess_io do
691
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
692
+ end
693
+ assert_match(/Foo Bar\n$/, err)
694
+ end
695
+ end
696
+
697
+ def test_expected_backtrace_location_when_inheriting_from_basic_object_and_including_kernel
698
+ Dir.mktmpdir("warn_test") do |dir|
699
+ File.write(dir + "/main.rb", "\nrequire 'sub'\n")
700
+ File.write(dir + "/sub.rb", <<-'RUBY')
701
+ require 'rubygems'
702
+ class C < BasicObject
703
+ include ::Kernel
704
+ def deprecated
705
+ warn "This is a deprecated method", uplevel: 2
706
+ end
707
+ end
708
+ C.new.deprecated
709
+ RUBY
710
+
711
+ _, err = capture_subprocess_io do
712
+ system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
713
+ end
714
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
715
+ _, err = capture_subprocess_io do
716
+ system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
717
+ end
718
+ assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
719
+ end
720
+ end
680
721
  end
681
722
 
682
723
  private