bundler 1.15.4 → 1.16.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (251) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +43 -0
  3. data/README.md +12 -7
  4. data/exe/bundle +1 -1
  5. data/exe/bundle_ruby +4 -3
  6. data/lib/bundler.rb +47 -37
  7. data/lib/bundler/build_metadata.rb +38 -0
  8. data/lib/bundler/capistrano.rb +5 -0
  9. data/lib/bundler/cli.rb +155 -67
  10. data/lib/bundler/cli/add.rb +0 -1
  11. data/lib/bundler/cli/binstubs.rb +9 -7
  12. data/lib/bundler/cli/cache.rb +5 -4
  13. data/lib/bundler/cli/check.rb +3 -5
  14. data/lib/bundler/cli/clean.rb +5 -6
  15. data/lib/bundler/cli/common.rb +11 -2
  16. data/lib/bundler/cli/config.rb +2 -1
  17. data/lib/bundler/cli/console.rb +2 -1
  18. data/lib/bundler/cli/doctor.rb +1 -0
  19. data/lib/bundler/cli/exec.rb +2 -1
  20. data/lib/bundler/cli/gem.rb +3 -2
  21. data/lib/bundler/cli/info.rb +0 -1
  22. data/lib/bundler/cli/init.rb +17 -6
  23. data/lib/bundler/cli/inject.rb +1 -0
  24. data/lib/bundler/cli/install.rb +61 -61
  25. data/lib/bundler/cli/issue.rb +1 -1
  26. data/lib/bundler/cli/list.rb +22 -0
  27. data/lib/bundler/cli/lock.rb +0 -1
  28. data/lib/bundler/cli/open.rb +2 -2
  29. data/lib/bundler/cli/outdated.rb +13 -8
  30. data/lib/bundler/cli/package.rb +9 -6
  31. data/lib/bundler/cli/platform.rb +1 -0
  32. data/lib/bundler/cli/plugin.rb +1 -0
  33. data/lib/bundler/cli/pristine.rb +9 -2
  34. data/lib/bundler/cli/show.rb +0 -1
  35. data/lib/bundler/cli/update.rb +31 -5
  36. data/lib/bundler/cli/viz.rb +1 -0
  37. data/lib/bundler/compact_index_client.rb +1 -0
  38. data/lib/bundler/compact_index_client/cache.rb +1 -0
  39. data/lib/bundler/compact_index_client/updater.rb +3 -2
  40. data/lib/bundler/compatibility_guard.rb +14 -0
  41. data/lib/bundler/constants.rb +1 -0
  42. data/lib/bundler/current_ruby.rb +5 -4
  43. data/lib/bundler/definition.rb +140 -95
  44. data/lib/bundler/dep_proxy.rb +2 -0
  45. data/lib/bundler/dependency.rb +6 -7
  46. data/lib/bundler/deployment.rb +1 -1
  47. data/lib/bundler/deprecate.rb +1 -0
  48. data/lib/bundler/dsl.rb +97 -62
  49. data/lib/bundler/endpoint_specification.rb +9 -0
  50. data/lib/bundler/env.rb +63 -27
  51. data/lib/bundler/environment_preserver.rb +26 -6
  52. data/lib/bundler/errors.rb +1 -0
  53. data/lib/bundler/feature_flag.rb +39 -4
  54. data/lib/bundler/fetcher.rb +15 -8
  55. data/lib/bundler/fetcher/base.rb +1 -0
  56. data/lib/bundler/fetcher/compact_index.rb +2 -11
  57. data/lib/bundler/fetcher/dependency.rb +1 -0
  58. data/lib/bundler/fetcher/downloader.rb +1 -0
  59. data/lib/bundler/fetcher/index.rb +1 -0
  60. data/lib/bundler/friendly_errors.rb +2 -1
  61. data/lib/bundler/gem_helper.rb +14 -9
  62. data/lib/bundler/gem_helpers.rb +1 -0
  63. data/lib/bundler/gem_remote_fetcher.rb +1 -0
  64. data/lib/bundler/gem_tasks.rb +1 -0
  65. data/lib/bundler/gem_version_promoter.rb +1 -0
  66. data/lib/bundler/gemdeps.rb +1 -0
  67. data/lib/bundler/graph.rb +1 -0
  68. data/lib/bundler/index.rb +15 -8
  69. data/lib/bundler/injector.rb +25 -22
  70. data/lib/bundler/inline.rb +5 -7
  71. data/lib/bundler/installer.rb +93 -45
  72. data/lib/bundler/installer/gem_installer.rb +2 -0
  73. data/lib/bundler/installer/parallel_installer.rb +73 -42
  74. data/lib/bundler/installer/standalone.rb +1 -0
  75. data/lib/bundler/lazy_specification.rb +2 -1
  76. data/lib/bundler/lockfile_generator.rb +95 -0
  77. data/lib/bundler/lockfile_parser.rb +10 -4
  78. data/lib/bundler/match_platform.rb +1 -0
  79. data/lib/bundler/mirror.rb +6 -3
  80. data/lib/bundler/plugin.rb +1 -0
  81. data/lib/bundler/plugin/api/source.rb +8 -0
  82. data/lib/bundler/plugin/installer.rb +7 -6
  83. data/lib/bundler/plugin/source_list.rb +7 -8
  84. data/lib/bundler/process_lock.rb +24 -0
  85. data/lib/bundler/psyched_yaml.rb +1 -0
  86. data/lib/bundler/remote_specification.rb +1 -0
  87. data/lib/bundler/resolver.rb +138 -191
  88. data/lib/bundler/resolver/spec_group.rb +111 -0
  89. data/lib/bundler/retry.rb +1 -0
  90. data/lib/bundler/ruby_dsl.rb +1 -0
  91. data/lib/bundler/ruby_version.rb +1 -0
  92. data/lib/bundler/rubygems_ext.rb +5 -4
  93. data/lib/bundler/rubygems_gem_installer.rb +23 -0
  94. data/lib/bundler/rubygems_integration.rb +56 -27
  95. data/lib/bundler/runtime.rb +3 -5
  96. data/lib/bundler/settings.rb +177 -76
  97. data/lib/bundler/settings/validator.rb +79 -0
  98. data/lib/bundler/setup.rb +1 -0
  99. data/lib/bundler/shared_helpers.rb +86 -26
  100. data/lib/bundler/similarity_detector.rb +1 -0
  101. data/lib/bundler/source.rb +32 -0
  102. data/lib/bundler/source/gemspec.rb +1 -0
  103. data/lib/bundler/source/git.rb +21 -16
  104. data/lib/bundler/source/git/git_proxy.rb +14 -10
  105. data/lib/bundler/source/metadata.rb +63 -0
  106. data/lib/bundler/source/path.rb +8 -8
  107. data/lib/bundler/source/path/installer.rb +2 -0
  108. data/lib/bundler/source/rubygems.rb +131 -84
  109. data/lib/bundler/source/rubygems/remote.rb +3 -0
  110. data/lib/bundler/source_list.rb +75 -15
  111. data/lib/bundler/spec_set.rb +2 -1
  112. data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
  113. data/lib/bundler/stub_specification.rb +1 -0
  114. data/lib/bundler/templates/Executable +4 -0
  115. data/lib/bundler/templates/Executable.bundler +105 -0
  116. data/lib/bundler/templates/Gemfile +1 -0
  117. data/lib/bundler/templates/gems.rb +8 -0
  118. data/lib/bundler/templates/newgem/README.md.tt +1 -1
  119. data/lib/bundler/templates/newgem/gitignore.tt +0 -1
  120. data/lib/bundler/templates/newgem/newgem.gemspec.tt +4 -1
  121. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  122. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
  123. data/lib/bundler/ui.rb +1 -0
  124. data/lib/bundler/ui/rg_proxy.rb +1 -0
  125. data/lib/bundler/ui/shell.rb +15 -4
  126. data/lib/bundler/ui/silent.rb +1 -0
  127. data/lib/bundler/uri_credentials_filter.rb +1 -0
  128. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  129. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
  130. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  131. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  132. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  133. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -2
  134. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  135. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -0
  136. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
  137. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
  138. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
  139. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
  140. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
  141. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
  142. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +3 -2
  143. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +69 -6
  144. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  145. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  146. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
  147. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +487 -148
  148. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
  149. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
  150. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  151. data/lib/bundler/vendored_fileutils.rb +9 -0
  152. data/lib/bundler/vendored_molinillo.rb +1 -0
  153. data/lib/bundler/vendored_persistent.rb +34 -0
  154. data/lib/bundler/vendored_thor.rb +1 -0
  155. data/lib/bundler/version.rb +6 -2
  156. data/lib/bundler/version_ranges.rb +1 -0
  157. data/lib/bundler/vlad.rb +5 -0
  158. data/lib/bundler/worker.rb +1 -0
  159. data/lib/bundler/yaml_serializer.rb +3 -3
  160. data/man/bundle-add.1 +43 -0
  161. data/man/bundle-add.1.txt +40 -0
  162. data/man/bundle-binstubs.1 +40 -0
  163. data/man/bundle-binstubs.1.txt +48 -0
  164. data/man/bundle-binstubs.ronn +14 -0
  165. data/man/bundle-check.1 +31 -0
  166. data/man/bundle-check.1.txt +32 -0
  167. data/man/bundle-clean.1 +24 -0
  168. data/man/bundle-clean.1.txt +26 -0
  169. data/man/bundle-config.1 +455 -0
  170. data/man/bundle-config.1.txt +491 -0
  171. data/man/bundle-config.ronn +133 -79
  172. data/man/bundle-exec.1 +165 -0
  173. data/man/bundle-exec.1.txt +178 -0
  174. data/man/bundle-exec.ronn +7 -0
  175. data/man/bundle-gem.1 +80 -0
  176. data/man/bundle-gem.1.txt +91 -0
  177. data/man/bundle-gem.ronn +2 -1
  178. data/man/bundle-info.1 +20 -0
  179. data/man/bundle-info.1.txt +21 -0
  180. data/man/bundle-init.1 +20 -0
  181. data/man/bundle-init.1.txt +24 -0
  182. data/man/bundle-inject.1 +33 -0
  183. data/man/bundle-inject.1.txt +32 -0
  184. data/man/bundle-install.1 +305 -0
  185. data/man/bundle-install.1.txt +385 -0
  186. data/man/bundle-install.ronn +32 -32
  187. data/man/bundle-list.1 +20 -0
  188. data/man/bundle-list.1.txt +21 -0
  189. data/man/bundle-list.ronn +15 -0
  190. data/man/bundle-lock.1 +84 -0
  191. data/man/bundle-lock.1.txt +93 -0
  192. data/man/bundle-open.1 +32 -0
  193. data/man/bundle-open.1.txt +29 -0
  194. data/man/bundle-outdated.1 +151 -0
  195. data/man/bundle-outdated.1.txt +127 -0
  196. data/man/bundle-outdated.ronn +1 -1
  197. data/man/bundle-package.1 +55 -0
  198. data/man/bundle-package.1.txt +79 -0
  199. data/man/bundle-package.ronn +5 -0
  200. data/man/bundle-platform.1 +61 -0
  201. data/man/bundle-platform.1.txt +57 -0
  202. data/man/bundle-pristine.1 +34 -0
  203. data/man/bundle-pristine.1.txt +44 -0
  204. data/man/bundle-pristine.ronn +24 -3
  205. data/man/bundle-show.1 +23 -0
  206. data/man/bundle-show.1.txt +25 -0
  207. data/man/bundle-update.1 +390 -0
  208. data/man/bundle-update.1.txt +386 -0
  209. data/man/bundle-update.ronn +2 -2
  210. data/man/bundle-viz.1 +39 -0
  211. data/man/bundle-viz.1.txt +38 -0
  212. data/man/bundle-viz.ronn +5 -5
  213. data/man/bundle.1 +132 -0
  214. data/man/bundle.1.txt +113 -0
  215. data/man/bundle.ronn +5 -2
  216. data/man/gemfile.5 +679 -0
  217. data/man/gemfile.5.ronn +31 -0
  218. data/man/gemfile.5.txt +636 -0
  219. data/man/index.txt +23 -0
  220. metadata +21 -36
  221. data/.codeclimate.yml +0 -25
  222. data/.gitignore +0 -18
  223. data/.rspec +0 -3
  224. data/.rubocop.yml +0 -131
  225. data/.rubocop_todo.yml +0 -418
  226. data/.travis.yml +0 -122
  227. data/CODE_OF_CONDUCT.md +0 -42
  228. data/CONTRIBUTING.md +0 -17
  229. data/Rakefile +0 -338
  230. data/bin/rake +0 -19
  231. data/bin/rspec +0 -15
  232. data/bin/rubocop +0 -17
  233. data/bin/with_rubygems +0 -39
  234. data/bundler.gemspec +0 -48
  235. data/doc/README.md +0 -30
  236. data/doc/TROUBLESHOOTING.md +0 -64
  237. data/doc/contributing/BUG_TRIAGE.md +0 -36
  238. data/doc/contributing/COMMUNITY.md +0 -13
  239. data/doc/contributing/GETTING_HELP.md +0 -11
  240. data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
  241. data/doc/contributing/ISSUES.md +0 -51
  242. data/doc/contributing/README.md +0 -38
  243. data/doc/development/NEW_FEATURES.md +0 -10
  244. data/doc/development/PULL_REQUESTS.md +0 -40
  245. data/doc/development/README.md +0 -19
  246. data/doc/development/RELEASING.md +0 -9
  247. data/doc/development/SETUP.md +0 -27
  248. data/doc/documentation/README.md +0 -29
  249. data/doc/documentation/VISION.md +0 -26
  250. data/doc/documentation/WRITING.md +0 -54
  251. data/task/release.rake +0 -116
@@ -1,12 +1,28 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class EnvironmentPreserver
5
+ INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL".freeze
6
+ BUNDLER_KEYS = %w[
7
+ BUNDLE_BIN_PATH
8
+ BUNDLE_GEMFILE
9
+ BUNDLER_ORIG_MANPATH
10
+ BUNDLER_VERSION
11
+ GEM_HOME
12
+ GEM_PATH
13
+ MANPATH
14
+ PATH
15
+ RUBYLIB
16
+ RUBYOPT
17
+ ].map(&:freeze).freeze
18
+ BUNDLER_PREFIX = "BUNDLER_ORIG_".freeze
19
+
4
20
  # @param env [ENV]
5
21
  # @param keys [Array<String>]
6
22
  def initialize(env, keys)
7
23
  @original = env.to_hash
8
24
  @keys = keys
9
- @prefix = "BUNDLER_ORIG_"
25
+ @prefix = BUNDLER_PREFIX
10
26
  end
11
27
 
12
28
  # @return [Hash]
@@ -14,9 +30,10 @@ module Bundler
14
30
  env = @original.clone
15
31
  @keys.each do |key|
16
32
  value = env[key]
17
- original_value = env[@prefix + key]
18
- if !value.nil? && !value.empty? && original_value.nil?
19
- env[@prefix + key] = value
33
+ if !value.nil? && !value.empty?
34
+ env[@prefix + key] ||= value
35
+ elsif value.nil?
36
+ env[@prefix + key] ||= INTENTIONALLY_NIL
20
37
  end
21
38
  end
22
39
  env
@@ -27,10 +44,13 @@ module Bundler
27
44
  env = @original.clone
28
45
  @keys.each do |key|
29
46
  value_original = env[@prefix + key]
30
- unless value_original.nil? || value_original.empty?
47
+ next if value_original.nil? || value_original.empty?
48
+ if value_original == INTENTIONALLY_NIL
49
+ env.delete(key)
50
+ else
31
51
  env[key] = value_original
32
- env.delete(@prefix + key)
33
52
  end
53
+ env.delete(@prefix + key)
34
54
  end
35
55
  env
36
56
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class BundlerError < StandardError
4
5
  def self.status_code(code)
@@ -1,22 +1,59 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class FeatureFlag
4
5
  def self.settings_flag(flag, &default)
5
6
  unless Bundler::Settings::BOOL_KEYS.include?(flag.to_s)
6
7
  raise "Cannot use `#{flag}` as a settings feature flag since it isn't a bool key"
7
8
  end
8
- define_method("#{flag}?") do
9
- value = Bundler.settings[flag]
9
+
10
+ settings_method("#{flag}?", flag, &default)
11
+ end
12
+ private_class_method :settings_flag
13
+
14
+ def self.settings_option(key, &default)
15
+ settings_method(key, key, &default)
16
+ end
17
+ private_class_method :settings_option
18
+
19
+ def self.settings_method(name, key, &default)
20
+ define_method(name) do
21
+ value = Bundler.settings[key]
10
22
  value = instance_eval(&default) if value.nil? && !default.nil?
11
23
  value
12
24
  end
13
25
  end
26
+ private_class_method :settings_method
14
27
 
15
28
  (1..10).each {|v| define_method("bundler_#{v}_mode?") { major_version >= v } }
16
29
 
30
+ settings_flag(:allow_bundler_dependency_conflicts) { bundler_2_mode? }
17
31
  settings_flag(:allow_offline_install) { bundler_2_mode? }
32
+ settings_flag(:auto_clean_without_path) { bundler_2_mode? }
33
+ settings_flag(:cache_all) { bundler_2_mode? }
34
+ settings_flag(:cache_command_is_package) { bundler_2_mode? }
35
+ settings_flag(:console_command) { !bundler_2_mode? }
36
+ settings_flag(:default_install_uses_path) { bundler_2_mode? }
37
+ settings_flag(:deployment_means_frozen) { bundler_2_mode? }
38
+ settings_flag(:disable_multisource) { bundler_2_mode? }
39
+ settings_flag(:error_on_stderr) { bundler_2_mode? }
40
+ settings_flag(:forget_cli_options) { bundler_2_mode? }
41
+ settings_flag(:global_gem_cache) { bundler_2_mode? }
42
+ settings_flag(:init_gems_rb) { bundler_2_mode? }
43
+ settings_flag(:list_command) { bundler_2_mode? }
44
+ settings_flag(:lockfile_uses_separate_rubygems_sources) { bundler_2_mode? }
18
45
  settings_flag(:only_update_to_newer_versions) { bundler_2_mode? }
19
46
  settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
47
+ settings_flag(:prefer_gems_rb) { bundler_2_mode? }
48
+ settings_flag(:print_only_version_number) { bundler_2_mode? }
49
+ settings_flag(:setup_makes_kernel_gem_public) { !bundler_2_mode? }
50
+ settings_flag(:skip_default_git_sources) { bundler_2_mode? }
51
+ settings_flag(:specific_platform) { bundler_2_mode? }
52
+ settings_flag(:suppress_install_using_messages) { bundler_2_mode? }
53
+ settings_flag(:unlock_source_unlocks_spec) { !bundler_2_mode? }
54
+ settings_flag(:update_requires_all_flag) { bundler_2_mode? }
55
+
56
+ settings_option(:default_cli_command) { bundler_2_mode? ? :cli_help : :install }
20
57
 
21
58
  def initialize(bundler_version)
22
59
  @bundler_version = Gem::Version.create(bundler_version)
@@ -26,7 +63,5 @@ module Bundler
26
63
  @bundler_version.segments.first
27
64
  end
28
65
  private :major_version
29
-
30
- class << self; private :settings_flag; end
31
66
  end
32
67
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/vendored_persistent"
3
4
  require "cgi"
4
5
  require "securerandom"
@@ -237,7 +238,7 @@ module Bundler
237
238
  Bundler.settings[:ssl_client_cert]
238
239
  raise SSLError if needs_ssl && !defined?(OpenSSL::SSL)
239
240
 
240
- con = Bundler::Persistent::Net::HTTP::Persistent.new "bundler", :ENV
241
+ con = PersistentHTTP.new "bundler", :ENV
241
242
  if gem_proxy = Bundler.rubygems.configuration[:http_proxy]
242
243
  con.proxy = URI.parse(gem_proxy) if gem_proxy != :no_proxy
243
244
  end
@@ -248,8 +249,11 @@ module Bundler
248
249
  con.cert_store = bundler_cert_store
249
250
  end
250
251
 
251
- if Bundler.settings[:ssl_client_cert]
252
- pem = File.read(Bundler.settings[:ssl_client_cert])
252
+ ssl_client_cert = Bundler.settings[:ssl_client_cert] ||
253
+ (Bundler.rubygems.configuration.ssl_client_cert if
254
+ Bundler.rubygems.configuration.respond_to?(:ssl_client_cert))
255
+ if ssl_client_cert
256
+ pem = File.read(ssl_client_cert)
253
257
  con.cert = OpenSSL::X509::Certificate.new(pem)
254
258
  con.key = OpenSSL::PKey::RSA.new(pem)
255
259
  end
@@ -273,16 +277,19 @@ module Bundler
273
277
  Timeout::Error, EOFError, SocketError, Errno::ENETDOWN, Errno::ENETUNREACH,
274
278
  Errno::EINVAL, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::EAGAIN,
275
279
  Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError,
276
- Bundler::Persistent::Net::HTTP::Persistent::Error, Zlib::BufError, Errno::EHOSTUNREACH
280
+ PersistentHTTP::Error, Zlib::BufError, Errno::EHOSTUNREACH
277
281
  ].freeze
278
282
 
279
283
  def bundler_cert_store
280
284
  store = OpenSSL::X509::Store.new
281
- if Bundler.settings[:ssl_ca_cert]
282
- if File.directory? Bundler.settings[:ssl_ca_cert]
283
- store.add_path Bundler.settings[:ssl_ca_cert]
285
+ ssl_ca_cert = Bundler.settings[:ssl_ca_cert] ||
286
+ (Bundler.rubygems.configuration.ssl_ca_cert if
287
+ Bundler.rubygems.configuration.respond_to?(:ssl_ca_cert))
288
+ if ssl_ca_cert
289
+ if File.directory? ssl_ca_cert
290
+ store.add_path ssl_ca_cert
284
291
  else
285
- store.add_file Bundler.settings[:ssl_ca_cert]
292
+ store.add_file ssl_ca_cert
286
293
  end
287
294
  else
288
295
  store.set_default_paths
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class Fetcher
4
5
  class Base
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/fetcher/base"
3
4
  require "bundler/worker"
4
5
 
@@ -61,7 +62,7 @@ module Bundler
61
62
  compact_index_request :fetch_spec
62
63
 
63
64
  def available?
64
- return nil unless md5_available?
65
+ return nil unless SharedHelpers.md5_available?
65
66
  user_home = Bundler.user_home
66
67
  return nil unless user_home.directory? && user_home.writable?
67
68
  # Read info file checksums out of /versions, so we can know if gems are up to date
@@ -120,16 +121,6 @@ module Bundler
120
121
  Net::HTTPNotModified.new(nil, nil, nil)
121
122
  end
122
123
  end
123
-
124
- def md5_available?
125
- require "openssl"
126
- OpenSSL::Digest::MD5.digest("")
127
- true
128
- rescue LoadError
129
- true
130
- rescue OpenSSL::Digest::DigestError
131
- false
132
- end
133
124
  end
134
125
  end
135
126
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/fetcher/base"
3
4
  require "cgi"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class Fetcher
4
5
  class Downloader
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/fetcher/base"
3
4
  require "rubygems/remote_fetcher"
4
5
 
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: true
3
+
3
4
  require "cgi"
4
5
  require "bundler/vendored_thor"
5
6
 
@@ -92,7 +93,7 @@ module Bundler
92
93
  #{e.backtrace && e.backtrace.join("\n ").chomp}
93
94
  ```
94
95
 
95
- #{Bundler::Env.new.report}
96
+ #{Bundler::Env.report}
96
97
  --- TEMPLATE END ----------------------------------------------------------------
97
98
 
98
99
  EOS
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/vendored_thor" unless defined?(Thor)
3
4
  require "bundler"
4
5
 
@@ -50,8 +51,8 @@ module Bundler
50
51
  install_gem(built_gem_path, :local)
51
52
  end
52
53
 
53
- desc "Create tag #{version_tag} and build and push #{name}-#{version}.gem to Rubygems\n" \
54
- "To prevent publishing in Rubygems use `gem_push=no rake release`"
54
+ desc "Create tag #{version_tag} and build and push #{name}-#{version}.gem to #{gem_push_host}\n" \
55
+ "To prevent publishing in RubyGems use `gem_push=no rake release`"
55
56
  task "release", [:remote] => ["build", "release:guard_clean",
56
57
  "release:source_control_push", "release:rubygem_push"] do
57
58
  end
@@ -92,18 +93,14 @@ module Bundler
92
93
  protected
93
94
 
94
95
  def rubygem_push(path)
95
- allowed_push_host = nil
96
96
  gem_command = "gem push '#{path}'"
97
97
  gem_command += " --key #{gem_key}" if gem_key
98
- if @gemspec.respond_to?(:metadata)
99
- allowed_push_host = @gemspec.metadata["allowed_push_host"]
100
- gem_command += " --host #{allowed_push_host}" if allowed_push_host
101
- end
98
+ gem_command += " --host #{allowed_push_host}" if allowed_push_host
102
99
  unless allowed_push_host || Bundler.user_home.join(".gem/credentials").file?
103
100
  raise "Your rubygems.org credentials aren't set. Run `gem push` to set them."
104
101
  end
105
102
  sh(gem_command)
106
- Bundler.ui.confirm "Pushed #{name} #{version} to #{allowed_push_host ? allowed_push_host : "rubygems.org."}"
103
+ Bundler.ui.confirm "Pushed #{name} #{version} to #{gem_push_host}"
107
104
  end
108
105
 
109
106
  def built_gem_path
@@ -116,6 +113,14 @@ module Bundler
116
113
  Bundler.ui.confirm "Pushed git commits and tags."
117
114
  end
118
115
 
116
+ def allowed_push_host
117
+ @gemspec.metadata["allowed_push_host"] if @gemspec.respond_to?(:metadata)
118
+ end
119
+
120
+ def gem_push_host
121
+ allowed_push_host || "rubygems.org"
122
+ end
123
+
119
124
  def perform_git_push(options = "")
120
125
  cmd = "git push #{options}"
121
126
  out, code = sh_with_code(cmd)
@@ -187,7 +192,7 @@ module Bundler
187
192
  end
188
193
 
189
194
  def gem_push?
190
- !%w(n no nil false off 0).include?(ENV["gem_push"].to_s.downcase)
195
+ !%w[n no nil false off 0].include?(ENV["gem_push"].to_s.downcase)
191
196
  end
192
197
  end
193
198
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  module GemHelpers
4
5
  GENERIC_CACHE = {} # rubocop:disable MutableConstant
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "rubygems/remote_fetcher"
3
4
 
4
5
  module Bundler
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "rake/clean"
3
4
  CLOBBER.include "pkg"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  # This class contains all of the logic for determining the next version of a
4
5
  # Gem to update to based on the requested level (patch, minor, major).
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class Gemdeps
4
5
  def initialize(runtime)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "set"
3
4
  module Bundler
4
5
  class Graph
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "set"
3
4
 
4
5
  module Bundler
@@ -111,6 +112,7 @@ module Bundler
111
112
  spec_sets.values.each(&blk)
112
113
  end
113
114
  sources.each {|s| s.each(&blk) }
115
+ self
114
116
  end
115
117
 
116
118
  # returns a list of the dependencies
@@ -131,6 +133,19 @@ module Bundler
131
133
  names.uniq
132
134
  end
133
135
 
136
+ def dependency_names_if_available
137
+ reduce([]) do |names, spec|
138
+ case spec
139
+ when EndpointSpecification, Gem::Specification, LazySpecification, StubSpecification
140
+ names.concat(spec.dependencies)
141
+ when RemoteSpecification # from the full index
142
+ return nil
143
+ else
144
+ raise "unhandled spec type in #dependency_names_if_available (#{spec.inspect})"
145
+ end
146
+ end.tap {|n| n && n.map!(&:name) }
147
+ end
148
+
134
149
  def use(other, override_dupes = false)
135
150
  return unless other
136
151
  other.each do |s|
@@ -191,14 +206,6 @@ module Bundler
191
206
  end
192
207
  end
193
208
 
194
- wants_prerelease = dependency.requirement.prerelease?
195
- wants_prerelease ||= base && base.any? {|base_spec| base_spec.version.prerelease? }
196
- only_prerelease = specs.all? {|spec| spec.version.prerelease? }
197
-
198
- unless wants_prerelease || only_prerelease
199
- found.reject! {|spec| spec.version.prerelease? }
200
- end
201
-
202
209
  found
203
210
  end
204
211
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class Injector
4
5
  def self.inject(new_deps, options = {})
@@ -12,38 +13,40 @@ module Bundler
12
13
  end
13
14
 
14
15
  def inject(gemfile_path, lockfile_path)
15
- if Bundler.settings[:frozen]
16
+ if Bundler.frozen?
16
17
  # ensure the lock and Gemfile are synced
17
18
  Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)
18
- # temporarily remove frozen while we inject
19
- frozen = Bundler.settings.delete(:frozen)
20
19
  end
21
20
 
22
- # evaluate the Gemfile we have now
23
- builder = Dsl.new
24
- builder.eval_gemfile(gemfile_path)
21
+ # temporarily unfreeze
22
+ Bundler.settings.temporary(:deployment => false, :frozen => false) do
23
+ # evaluate the Gemfile we have now
24
+ builder = Dsl.new
25
+ builder.eval_gemfile(gemfile_path)
26
+
27
+ # don't inject any gems that are already in the Gemfile
28
+ @new_deps -= builder.dependencies
25
29
 
26
- # don't inject any gems that are already in the Gemfile
27
- @new_deps -= builder.dependencies
30
+ # add new deps to the end of the in-memory Gemfile
31
+ # Set conservative versioning to false because we want to let the resolver resolve the version first
32
+ builder.eval_gemfile("injected gems", build_gem_lines(false)) if @new_deps.any?
28
33
 
29
- # add new deps to the end of the in-memory Gemfile
30
- # Set conservative versioining to false because we want to let the resolver resolve the version first
31
- builder.eval_gemfile("injected gems", build_gem_lines(false)) if @new_deps.any?
34
+ # resolve to see if the new deps broke anything
35
+ @definition = builder.to_definition(lockfile_path, {})
36
+ @definition.resolve_remotely!
32
37
 
33
- # resolve to see if the new deps broke anything
34
- @definition = builder.to_definition(lockfile_path, {})
35
- @definition.resolve_remotely!
38
+ # since nothing broke, we can add those gems to the gemfile
39
+ append_to(gemfile_path, build_gem_lines(@options[:conservative_versioning])) if @new_deps.any?
36
40
 
37
- # since nothing broke, we can add those gems to the gemfile
38
- append_to(gemfile_path, build_gem_lines(@options[:conservative_versioning])) if @new_deps.any?
41
+ # since we resolved successfully, write out the lockfile
42
+ @definition.lock(Bundler.default_lockfile)
39
43
 
40
- # since we resolved successfully, write out the lockfile
41
- @definition.lock(Bundler.default_lockfile)
44
+ # invalidate the cached Bundler.definition
45
+ Bundler.reset_paths!
42
46
 
43
- # return an array of the deps that we added
44
- return @new_deps
45
- ensure
46
- Bundler.settings[:frozen] = "1" if frozen
47
+ # return an array of the deps that we added
48
+ @new_deps
49
+ end
47
50
  end
48
51
 
49
52
  private