bundler 2.0.0.pre.3 → 2.1.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 (217) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +721 -572
  3. data/LICENSE.md +18 -19
  4. data/README.md +9 -8
  5. data/bundler.gemspec +8 -25
  6. data/exe/bundle +19 -3
  7. data/lib/bundler.rb +121 -68
  8. data/lib/bundler/build_metadata.rb +3 -3
  9. data/lib/bundler/capistrano.rb +5 -5
  10. data/lib/bundler/cli.rb +133 -125
  11. data/lib/bundler/cli/add.rb +27 -16
  12. data/lib/bundler/cli/common.rb +11 -12
  13. data/lib/bundler/cli/config.rb +161 -86
  14. data/lib/bundler/cli/console.rb +2 -2
  15. data/lib/bundler/cli/doctor.rb +4 -4
  16. data/lib/bundler/cli/exec.rb +4 -9
  17. data/lib/bundler/cli/gem.rb +5 -5
  18. data/lib/bundler/cli/info.rb +17 -5
  19. data/lib/bundler/cli/init.rb +1 -1
  20. data/lib/bundler/cli/install.rb +12 -11
  21. data/lib/bundler/cli/issue.rb +3 -3
  22. data/lib/bundler/cli/open.rb +10 -6
  23. data/lib/bundler/cli/outdated.rb +85 -81
  24. data/lib/bundler/cli/package.rb +8 -9
  25. data/lib/bundler/cli/plugin.rb +9 -2
  26. data/lib/bundler/cli/pristine.rb +1 -1
  27. data/lib/bundler/cli/show.rb +1 -1
  28. data/lib/bundler/cli/update.rb +32 -12
  29. data/lib/bundler/compact_index_client.rb +25 -9
  30. data/lib/bundler/compact_index_client/updater.rb +2 -6
  31. data/lib/bundler/current_ruby.rb +8 -7
  32. data/lib/bundler/definition.rb +36 -27
  33. data/lib/bundler/dependency.rb +16 -4
  34. data/lib/bundler/deployment.rb +2 -2
  35. data/lib/bundler/dsl.rb +18 -42
  36. data/lib/bundler/env.rb +8 -13
  37. data/lib/bundler/environment_preserver.rb +0 -1
  38. data/lib/bundler/feature_flag.rb +1 -13
  39. data/lib/bundler/fetcher.rb +14 -11
  40. data/lib/bundler/fetcher/compact_index.rb +26 -12
  41. data/lib/bundler/fetcher/dependency.rb +1 -1
  42. data/lib/bundler/fetcher/downloader.rb +4 -1
  43. data/lib/bundler/fetcher/index.rb +4 -2
  44. data/lib/bundler/friendly_errors.rb +4 -5
  45. data/lib/bundler/gem_helper.rb +39 -24
  46. data/lib/bundler/gem_helpers.rb +2 -4
  47. data/lib/bundler/gem_tasks.rb +1 -1
  48. data/lib/bundler/gem_version_promoter.rb +3 -3
  49. data/lib/bundler/graph.rb +2 -2
  50. data/lib/bundler/injector.rb +10 -8
  51. data/lib/bundler/inline.rb +19 -18
  52. data/lib/bundler/installer.rb +7 -14
  53. data/lib/bundler/installer/gem_installer.rb +5 -1
  54. data/lib/bundler/installer/parallel_installer.rb +4 -8
  55. data/lib/bundler/installer/standalone.rb +1 -2
  56. data/lib/bundler/lazy_specification.rb +2 -2
  57. data/lib/bundler/lockfile_parser.rb +13 -21
  58. data/lib/bundler/match_platform.rb +1 -1
  59. data/lib/bundler/plugin.rb +42 -29
  60. data/lib/bundler/plugin/api.rb +1 -1
  61. data/lib/bundler/plugin/api/source.rb +2 -2
  62. data/lib/bundler/plugin/index.rb +14 -3
  63. data/lib/bundler/plugin/installer.rb +28 -15
  64. data/lib/bundler/psyched_yaml.rb +1 -1
  65. data/lib/bundler/resolver.rb +72 -24
  66. data/lib/bundler/resolver/spec_group.rb +2 -2
  67. data/lib/bundler/retry.rb +2 -2
  68. data/lib/bundler/ruby_version.rb +4 -19
  69. data/lib/bundler/rubygems_ext.rb +10 -66
  70. data/lib/bundler/rubygems_gem_installer.rb +1 -1
  71. data/lib/bundler/rubygems_integration.rb +144 -395
  72. data/lib/bundler/runtime.rb +2 -9
  73. data/lib/bundler/settings.rb +15 -48
  74. data/lib/bundler/setup.rb +6 -5
  75. data/lib/bundler/shared_helpers.rb +58 -71
  76. data/lib/bundler/similarity_detector.rb +2 -2
  77. data/lib/bundler/source.rb +5 -5
  78. data/lib/bundler/source/git.rb +19 -12
  79. data/lib/bundler/source/git/git_proxy.rb +35 -39
  80. data/lib/bundler/source/metadata.rb +7 -2
  81. data/lib/bundler/source/path.rb +13 -8
  82. data/lib/bundler/source/rubygems.rb +11 -5
  83. data/lib/bundler/source/rubygems/remote.rb +1 -2
  84. data/lib/bundler/source_list.rb +9 -12
  85. data/lib/bundler/spec_set.rb +1 -6
  86. data/lib/bundler/stub_specification.rb +18 -30
  87. data/lib/bundler/templates/Executable.bundler +23 -14
  88. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
  89. data/lib/bundler/templates/newgem/Gemfile.tt +8 -0
  90. data/lib/bundler/templates/newgem/README.md.tt +4 -3
  91. data/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -27
  92. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +1 -1
  93. data/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  94. data/lib/bundler/ui.rb +3 -3
  95. data/lib/bundler/ui/rg_proxy.rb +1 -1
  96. data/lib/bundler/ui/shell.rb +4 -8
  97. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  98. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  99. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  100. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  101. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +151 -48
  102. data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
  103. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
  104. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  105. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  106. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  107. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  108. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  109. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  110. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  111. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  112. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
  113. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  114. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
  115. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  116. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
  117. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  118. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  119. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  120. data/lib/bundler/vendor/thor/lib/thor.rb +1 -1
  121. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -11
  122. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  123. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
  124. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  125. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -2
  126. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
  127. data/lib/bundler/vendor/thor/lib/thor/base.rb +16 -17
  128. data/lib/bundler/vendor/thor/lib/thor/error.rb +82 -0
  129. data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  130. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  131. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  132. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +7 -2
  133. data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -6
  134. data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  135. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
  136. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  137. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  138. data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  139. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  140. data/lib/bundler/vendored_fileutils.rb +1 -6
  141. data/lib/bundler/vendored_molinillo.rb +1 -1
  142. data/lib/bundler/vendored_persistent.rb +7 -5
  143. data/lib/bundler/vendored_thor.rb +2 -2
  144. data/lib/bundler/version.rb +1 -20
  145. data/lib/bundler/version_ranges.rb +51 -5
  146. data/lib/bundler/vlad.rb +3 -3
  147. data/lib/bundler/worker.rb +1 -3
  148. data/lib/bundler/yaml_serializer.rb +2 -3
  149. data/man/bundle-add.1 +10 -2
  150. data/man/bundle-add.1.txt +11 -5
  151. data/man/bundle-add.ronn +7 -1
  152. data/man/bundle-binstubs.1 +2 -2
  153. data/man/bundle-binstubs.1.txt +2 -2
  154. data/man/bundle-binstubs.ronn +1 -1
  155. data/man/bundle-check.1 +1 -1
  156. data/man/bundle-check.1.txt +6 -6
  157. data/man/bundle-clean.1 +1 -1
  158. data/man/bundle-clean.1.txt +1 -1
  159. data/man/bundle-config.1 +36 -36
  160. data/man/bundle-config.1.txt +66 -67
  161. data/man/bundle-config.ronn +42 -40
  162. data/man/bundle-doctor.1 +1 -1
  163. data/man/bundle-doctor.1.txt +1 -1
  164. data/man/bundle-exec.1 +1 -1
  165. data/man/bundle-exec.1.txt +1 -1
  166. data/man/bundle-gem.1 +1 -1
  167. data/man/bundle-gem.1.txt +3 -3
  168. data/man/bundle-info.1 +1 -1
  169. data/man/bundle-info.1.txt +1 -1
  170. data/man/bundle-init.1 +2 -2
  171. data/man/bundle-init.1.txt +2 -2
  172. data/man/bundle-init.ronn +1 -1
  173. data/man/bundle-inject.1 +1 -1
  174. data/man/bundle-inject.1.txt +1 -1
  175. data/man/bundle-install.1 +8 -5
  176. data/man/bundle-install.1.txt +56 -51
  177. data/man/bundle-install.ronn +9 -4
  178. data/man/bundle-list.1 +1 -1
  179. data/man/bundle-list.1.txt +1 -1
  180. data/man/bundle-lock.1 +1 -1
  181. data/man/bundle-lock.1.txt +16 -16
  182. data/man/bundle-open.1 +1 -1
  183. data/man/bundle-open.1.txt +1 -1
  184. data/man/bundle-outdated.1 +1 -1
  185. data/man/bundle-outdated.1.txt +1 -1
  186. data/man/bundle-package.1 +1 -1
  187. data/man/bundle-package.1.txt +1 -1
  188. data/man/bundle-platform.1 +1 -1
  189. data/man/bundle-platform.1.txt +1 -1
  190. data/man/bundle-pristine.1 +1 -1
  191. data/man/bundle-pristine.1.txt +1 -1
  192. data/man/bundle-remove.1 +1 -1
  193. data/man/bundle-remove.1.txt +1 -1
  194. data/man/bundle-show.1 +1 -1
  195. data/man/bundle-show.1.txt +1 -1
  196. data/man/bundle-update.1 +4 -4
  197. data/man/bundle-update.1.txt +64 -65
  198. data/man/bundle-update.ronn +3 -3
  199. data/man/bundle-viz.1 +1 -1
  200. data/man/bundle-viz.1.txt +1 -1
  201. data/man/bundle.1 +3 -3
  202. data/man/bundle.1.txt +8 -8
  203. data/man/bundle.ronn +2 -2
  204. data/man/gemfile.5 +13 -16
  205. data/man/gemfile.5.ronn +10 -14
  206. data/man/gemfile.5.txt +104 -108
  207. metadata +16 -102
  208. data/exe/bundle_ruby +0 -60
  209. data/lib/bundler/cli/cache.rb +0 -36
  210. data/lib/bundler/compatibility_guard.rb +0 -14
  211. data/lib/bundler/ssl_certs/.document +0 -1
  212. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  213. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  214. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  215. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  216. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  217. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
@@ -11,7 +11,6 @@ module Bundler
11
11
  def run
12
12
  Bundler.ui.level = "error" if options[:quiet]
13
13
  Bundler.settings.set_command_option_if_given :path, options[:path]
14
- Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
15
14
  Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
16
15
 
17
16
  setup_cache_all
@@ -19,30 +18,30 @@ module Bundler
19
18
 
20
19
  # TODO: move cache contents here now that all bundles are locked
21
20
  custom_path = Bundler.settings[:path] if options[:path]
22
- Bundler.load.cache(custom_path)
21
+
22
+ Bundler.settings.temporary(:cache_all_platforms => options["all-platforms"]) do
23
+ Bundler.load.cache(custom_path)
24
+ end
23
25
  end
24
26
 
25
27
  private
26
28
 
27
29
  def install
28
- require "bundler/cli/install"
30
+ require_relative "install"
29
31
  options = self.options.dup
30
- if Bundler.settings[:cache_all_platforms]
31
- options["local"] = false
32
- options["update"] = true
33
- end
32
+ options["local"] = false if Bundler.settings[:cache_all_platforms]
34
33
  Bundler::CLI::Install.new(options).run
35
34
  end
36
35
 
37
36
  def setup_cache_all
38
- all = options.fetch(:all, Bundler.feature_flag.cache_command_is_package? || nil)
37
+ all = options.fetch(:all, Bundler.feature_flag.cache_all? || nil)
39
38
 
40
39
  Bundler.settings.set_command_option_if_given :cache_all, all
41
40
 
42
41
  if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
43
42
  Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
44
43
  "to package them as well, please pass the --all flag. This will be the default " \
45
- "on Bundler 2.0."
44
+ "on Bundler 3.0."
46
45
  end
47
46
  end
48
47
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/vendored_thor"
3
+ require_relative "../vendored_thor"
4
4
  module Bundler
5
5
  class CLI::Plugin < Thor
6
6
  desc "install PLUGINS", "Install the plugin from the source"
7
7
  long_desc <<-D
8
- Install plugins either from the rubygems source provided (with --source option) or from a git source provided with (--git option). If no sources are provided, it uses Gem.sources
8
+ Install plugins either from the rubygems source provided (with --source option) or from a git source provided with --git (for remote repos) or --local_git (for local repos). If no sources are provided, it uses Gem.sources
9
9
  D
10
10
  method_option "source", :type => :string, :default => nil, :banner =>
11
11
  "URL of the RubyGems source to fetch the plugin from"
@@ -13,6 +13,8 @@ module Bundler
13
13
  "The version of the plugin to fetch"
14
14
  method_option "git", :type => :string, :default => nil, :banner =>
15
15
  "URL of the git repo to fetch from"
16
+ method_option "local_git", :type => :string, :default => nil, :banner =>
17
+ "Path of the local git repo to fetch from"
16
18
  method_option "branch", :type => :string, :default => nil, :banner =>
17
19
  "The git branch to checkout"
18
20
  method_option "ref", :type => :string, :default => nil, :banner =>
@@ -20,5 +22,10 @@ module Bundler
20
22
  def install(*plugins)
21
23
  Bundler::Plugin.install(plugins, options)
22
24
  end
25
+
26
+ desc "list", "List the installed plugins and available commands"
27
+ def list
28
+ Bundler::Plugin.list
29
+ end
23
30
  end
24
31
  end
@@ -33,7 +33,7 @@ module Bundler
33
33
  if extension_cache_path = source.extension_cache_path(spec)
34
34
  FileUtils.rm_rf extension_cache_path
35
35
  end
36
- FileUtils.rm_rf spec.extension_dir if spec.respond_to?(:extension_dir)
36
+ FileUtils.rm_rf spec.extension_dir
37
37
  FileUtils.rm_rf spec.full_gem_path
38
38
  else
39
39
  Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
@@ -24,7 +24,7 @@ module Bundler
24
24
  return unless spec
25
25
  path = spec.full_gem_path
26
26
  unless File.directory?(path)
27
- Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at:"
27
+ return Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at: #{path}"
28
28
  end
29
29
  end
30
30
  return Bundler.ui.info(path)
@@ -22,7 +22,7 @@ module Bundler
22
22
  if Bundler.feature_flag.update_requires_all_flag?
23
23
  raise InvalidOption, "To update everything, pass the `--all` flag."
24
24
  end
25
- SharedHelpers.major_deprecation 3, "Pass --all to `bundle update` to update everything"
25
+ SharedHelpers.major_deprecation 2, "Pass --all to `bundle update` to update everything"
26
26
  elsif !full_update && options[:all]
27
27
  raise InvalidOption, "Cannot specify --all along with specific options."
28
28
  end
@@ -58,24 +58,44 @@ module Bundler
58
58
  Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
59
59
 
60
60
  Bundler.definition.validate_runtime!
61
+
62
+ if locked_gems = Bundler.definition.locked_gems
63
+ previous_locked_info = locked_gems.specs.reduce({}) do |h, s|
64
+ h[s.name] = { :spec => s, :version => s.version, :source => s.source.to_s }
65
+ h
66
+ end
67
+ end
68
+
61
69
  installer = Installer.install Bundler.root, Bundler.definition, opts
62
70
  Bundler.load.cache if Bundler.app_cache.exist?
63
71
 
64
72
  if CLI::Common.clean_after_install?
65
- require "bundler/cli/clean"
73
+ require_relative "clean"
66
74
  Bundler::CLI::Clean.new(options).run
67
75
  end
68
76
 
69
- if locked_gems = Bundler.definition.locked_gems
77
+ if locked_gems
70
78
  gems.each do |name|
71
- locked_version = locked_gems.specs.find {|s| s.name == name }
72
- locked_version &&= locked_version.version
73
- next unless locked_version
74
- new_version = Bundler.definition.specs[name].first
75
- new_version &&= new_version.version
76
- if !new_version
77
- Bundler.ui.warn "Bundler attempted to update #{name} but it was removed from the bundle"
78
- elsif new_version < locked_version
79
+ locked_info = previous_locked_info[name]
80
+ next unless locked_info
81
+
82
+ locked_spec = locked_info[:spec]
83
+ new_spec = Bundler.definition.specs[name].first
84
+ unless new_spec
85
+ if Bundler.rubygems.platforms.none? {|p| locked_spec.match_platform(p) }
86
+ Bundler.ui.warn "Bundler attempted to update #{name} but it was not considered because it is for a different platform from the current one"
87
+ end
88
+
89
+ next
90
+ end
91
+
92
+ locked_source = locked_info[:source]
93
+ new_source = new_spec.source.to_s
94
+ next if locked_source != new_source
95
+
96
+ new_version = new_spec.version
97
+ locked_version = locked_info[:version]
98
+ if new_version < locked_version
79
99
  Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
80
100
  elsif new_version == locked_version
81
101
  Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
@@ -84,7 +104,7 @@ module Bundler
84
104
  end
85
105
 
86
106
  Bundler.ui.confirm "Bundle updated!"
87
- Bundler::CLI::Common.output_without_groups_message
107
+ Bundler::CLI::Common.output_without_groups_message(:update)
88
108
  Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
89
109
  end
90
110
  end
@@ -13,16 +13,11 @@ module Bundler
13
13
 
14
14
  class Error < StandardError; end
15
15
 
16
- require "bundler/compact_index_client/cache"
17
- require "bundler/compact_index_client/updater"
16
+ require_relative "compact_index_client/cache"
17
+ require_relative "compact_index_client/updater"
18
18
 
19
19
  attr_reader :directory
20
20
 
21
- # @return [Lambda] A lambda that takes an array of inputs and a block, and
22
- # maps the inputs with the block in parallel.
23
- #
24
- attr_accessor :in_parallel
25
-
26
21
  def initialize(directory, fetcher)
27
22
  @directory = Pathname.new(directory)
28
23
  @updater = Updater.new(fetcher)
@@ -31,7 +26,28 @@ module Bundler
31
26
  @info_checksums_by_name = {}
32
27
  @parsed_checksums = false
33
28
  @mutex = Mutex.new
34
- @in_parallel = lambda do |inputs, &blk|
29
+ end
30
+
31
+ def execution_mode=(block)
32
+ Bundler::CompactIndexClient.debug { "execution_mode=" }
33
+ @endpoints = Set.new
34
+
35
+ @execution_mode = block
36
+ end
37
+
38
+ # @return [Lambda] A lambda that takes an array of inputs and a block, and
39
+ # maps the inputs with the block in parallel.
40
+ #
41
+ def execution_mode
42
+ @execution_mode || sequentially
43
+ end
44
+
45
+ def sequential_execution_mode!
46
+ self.execution_mode = sequentially
47
+ end
48
+
49
+ def sequentially
50
+ @sequentially ||= lambda do |inputs, &blk|
35
51
  inputs.map(&blk)
36
52
  end
37
53
  end
@@ -51,7 +67,7 @@ module Bundler
51
67
 
52
68
  def dependencies(names)
53
69
  Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
54
- in_parallel.call(names) do |name|
70
+ execution_mode.call(names) do |name|
55
71
  update_info(name)
56
72
  @cache.dependencies(name).map {|d| d.unshift(name) }
57
73
  end.flatten(1)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/vendored_fileutils"
3
+ require_relative "../vendored_fileutils"
4
4
  require "stringio"
5
5
  require "zlib"
6
6
 
@@ -95,11 +95,7 @@ module Bundler
95
95
  end
96
96
 
97
97
  def slice_body(body, range)
98
- if body.respond_to?(:byteslice)
99
- body.byteslice(range)
100
- else # pre-1.9.3
101
- body.unpack("@#{range.first}a#{range.end + 1}").first
102
- end
98
+ body.byteslice(range)
103
99
  end
104
100
 
105
101
  def checksum_for_file(path)
@@ -38,28 +38,29 @@ module Bundler
38
38
  ].freeze
39
39
 
40
40
  def ruby?
41
- !mswin? && (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" ||
42
- RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev" || RUBY_ENGINE == "truffleruby")
41
+ return true if Bundler::GemHelpers.generic_local_platform == Gem::Platform::RUBY
42
+
43
+ !mswin? && (RUBY_ENGINE == "ruby" || RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev" || RUBY_ENGINE == "truffleruby")
43
44
  end
44
45
 
45
46
  def mri?
46
- !mswin? && (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby")
47
+ !mswin? && RUBY_ENGINE == "ruby"
47
48
  end
48
49
 
49
50
  def rbx?
50
- ruby? && defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx"
51
+ ruby? && RUBY_ENGINE == "rbx"
51
52
  end
52
53
 
53
54
  def jruby?
54
- defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
55
+ RUBY_ENGINE == "jruby"
55
56
  end
56
57
 
57
58
  def maglev?
58
- defined?(RUBY_ENGINE) && RUBY_ENGINE == "maglev"
59
+ RUBY_ENGINE == "maglev"
59
60
  end
60
61
 
61
62
  def truffleruby?
62
- defined?(RUBY_ENGINE) && RUBY_ENGINE == "truffleruby"
63
+ RUBY_ENGINE == "truffleruby"
63
64
  end
64
65
 
65
66
  def mswin?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/lockfile_parser"
3
+ require_relative "lockfile_parser"
4
4
  require "set"
5
5
 
6
6
  module Bundler
@@ -167,7 +167,7 @@ module Bundler
167
167
  def specs
168
168
  @specs ||= begin
169
169
  begin
170
- specs = resolve.materialize(Bundler.settings[:cache_all_platforms] ? dependencies : requested_dependencies)
170
+ specs = resolve.materialize(requested_dependencies)
171
171
  rescue GemNotFound => e # Handle yanked gem
172
172
  gem_name, gem_version = extract_gem_info(e)
173
173
  locked_gem = @locked_specs[gem_name].last
@@ -317,7 +317,7 @@ module Bundler
317
317
  end
318
318
 
319
319
  def spec_git_paths
320
- sources.git_sources.map {|s| s.path.to_s }
320
+ sources.git_sources.map {|s| File.realpath(s.path) }
321
321
  end
322
322
 
323
323
  def groups
@@ -331,7 +331,7 @@ module Bundler
331
331
  # i.e., Windows with `git config core.autocrlf=true`
332
332
  contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match("\r\n")
333
333
 
334
- if @locked_bundler_version && Bundler.feature_flag.lockfile_upgrade_warning?
334
+ if @locked_bundler_version
335
335
  locked_major = @locked_bundler_version.segments.first
336
336
  current_major = Gem::Version.create(Bundler::VERSION).segments.first
337
337
 
@@ -385,7 +385,7 @@ module Bundler
385
385
  end
386
386
 
387
387
  def to_lock
388
- require "bundler/lockfile_generator"
388
+ require_relative "lockfile_generator"
389
389
  LockfileGenerator.generate(self)
390
390
  end
391
391
 
@@ -397,9 +397,9 @@ module Bundler
397
397
 
398
398
  unless explicit_flag
399
399
  suggested_command = if Bundler.settings.locations("frozen")[:global]
400
- "bundle config --delete frozen"
400
+ "bundle config unset frozen"
401
401
  elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
402
- "bundle config --delete deployment"
402
+ "bundle config unset deployment"
403
403
  else
404
404
  "bundle install --no-deployment"
405
405
  end
@@ -519,9 +519,7 @@ module Bundler
519
519
  end
520
520
 
521
521
  def add_current_platform
522
- current_platform = Bundler.local_platform
523
- add_platform(current_platform) if Bundler.feature_flag.specific_platform?
524
- add_platform(generic(current_platform))
522
+ current_platforms.each {|platform| add_platform(platform) }
525
523
  end
526
524
 
527
525
  def find_resolved_spec(current_spec)
@@ -545,6 +543,14 @@ module Bundler
545
543
 
546
544
  private
547
545
 
546
+ def current_platforms
547
+ current_platform = Bundler.local_platform
548
+ [].tap do |platforms|
549
+ platforms << current_platform if Bundler.feature_flag.specific_platform?
550
+ platforms << generic(current_platform)
551
+ end
552
+ end
553
+
548
554
  def change_reason
549
555
  if unlocking?
550
556
  unlock_reason = @unlock.reject {|_k, v| Array(v).empty? }.map do |k, v|
@@ -643,7 +649,7 @@ module Bundler
643
649
  end
644
650
 
645
651
  def converge_rubygems_sources
646
- return false if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
652
+ return false if Bundler.feature_flag.disable_multisource?
647
653
 
648
654
  changes = false
649
655
 
@@ -782,7 +788,7 @@ module Bundler
782
788
 
783
789
  # Path sources have special logic
784
790
  if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
785
- other_sources_specs = begin
791
+ new_specs = begin
786
792
  s.source.specs
787
793
  rescue PathError, GitError
788
794
  # if we won't need the source (according to the lockfile),
@@ -794,25 +800,26 @@ module Bundler
794
800
  raise
795
801
  end
796
802
 
797
- other = other_sources_specs[s].first
803
+ new_spec = new_specs[s].first
798
804
 
799
805
  # If the spec is no longer in the path source, unlock it. This
800
806
  # commonly happens if the version changed in the gemspec
801
- next unless other
807
+ next unless new_spec
808
+
809
+ new_runtime_deps = new_spec.dependencies.select {|d| d.type != :development }
810
+ old_runtime_deps = s.dependencies.select {|d| d.type != :development }
811
+ # If the dependencies of the path source have changed and locked spec can't satisfy new dependencies, unlock it
812
+ next unless new_runtime_deps.sort == old_runtime_deps.sort || new_runtime_deps.all? {|d| satisfies_locked_spec?(d) }
802
813
 
803
- deps2 = other.dependencies.select {|d| d.type != :development }
804
- runtime_dependencies = s.dependencies.select {|d| d.type != :development }
805
- # If the dependencies of the path source have changed, unlock it
806
- next unless runtime_dependencies.sort == deps2.sort
814
+ s.dependencies.replace(new_spec.dependencies)
807
815
  end
808
816
 
809
817
  converged << s
810
818
  end
811
819
 
812
820
  resolve = SpecSet.new(converged)
813
- expanded_deps = expand_dependencies(deps, true)
814
- @locked_specs_incomplete_for_platform = !resolve.for(expanded_deps, @unlock[:gems], true, true)
815
- resolve = resolve.for(expanded_deps, @unlock[:gems], false, false, false)
821
+ @locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(deps), @unlock[:gems], true, true)
822
+ resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
816
823
  diff = nil
817
824
 
818
825
  # Now, we unlock any sources that do not have anymore gems pinned to it
@@ -855,8 +862,8 @@ module Bundler
855
862
  concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
856
863
  end
857
864
  [
858
- Dependency.new("ruby\0", ruby_versions),
859
- Dependency.new("rubygems\0", Gem::VERSION),
865
+ Dependency.new("Ruby\0", ruby_versions),
866
+ Dependency.new("RubyGems\0", Gem::VERSION),
860
867
  ]
861
868
  end
862
869
  end
@@ -885,7 +892,7 @@ module Bundler
885
892
  next if !remote && !dep.current_platform?
886
893
  platforms = dep.gem_platforms(sorted_platforms)
887
894
  if platforms.empty? && !Bundler.settings[:disable_platform_warnings]
888
- mapped_platforms = dep.platforms.map {|p| Dependency::PLATFORM_MAP[p] }
895
+ mapped_platforms = dep.expanded_platforms
889
896
  Bundler.ui.warn \
890
897
  "The dependency #{dep} will be unused by any of the platforms Bundler is installing for. " \
891
898
  "Bundler is installing for #{@platforms.join ", "} but the dependency " \
@@ -915,7 +922,7 @@ module Bundler
915
922
  # look for that gemspec (or its dependencies)
916
923
  default = sources.default_source
917
924
  source_requirements = { :default => default }
918
- default = nil unless Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
925
+ default = nil unless Bundler.feature_flag.disable_multisource?
919
926
  dependencies.each do |dep|
920
927
  next unless source = dep.source || default
921
928
  source_requirements[dep.name] = source
@@ -929,7 +936,7 @@ module Bundler
929
936
 
930
937
  def pinned_spec_names(skip = nil)
931
938
  pinned_names = []
932
- default = Bundler.feature_flag.lockfile_uses_separate_rubygems_sources? && sources.default_source
939
+ default = Bundler.feature_flag.disable_multisource? && sources.default_source
933
940
  @dependencies.each do |dep|
934
941
  next unless dep_source = dep.source || default
935
942
  next if dep_source == skip
@@ -977,7 +984,9 @@ module Bundler
977
984
  dependencies_by_name = dependencies.inject({}) {|memo, dep| memo.update(dep.name => dep) }
978
985
  @locked_gems.specs.reduce({}) do |requirements, locked_spec|
979
986
  name = locked_spec.name
980
- next requirements if @locked_gems.dependencies[name] != dependencies_by_name[name]
987
+ dependency = dependencies_by_name[name]
988
+ next requirements if @locked_gems.dependencies[name] != dependency
989
+ next requirements if dependency && dependency.source.is_a?(Source::Path)
981
990
  dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
982
991
  requirements[name] = DepProxy.new(dep, locked_spec.platform)
983
992
  requirements