bundler 1.17.0.pre.2 → 2.1.0.pre.2

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 (218) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +769 -570
  3. data/LICENSE.md +18 -19
  4. data/README.md +9 -8
  5. data/bundler.gemspec +12 -23
  6. data/exe/bundle +19 -3
  7. data/lib/bundler.rb +121 -68
  8. data/lib/bundler/build_metadata.rb +14 -7
  9. data/lib/bundler/capistrano.rb +4 -4
  10. data/lib/bundler/cli.rb +129 -121
  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 +1 -1
  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 +11 -10
  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 +31 -11
  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 +9 -7
  32. data/lib/bundler/definition.rb +35 -26
  33. data/lib/bundler/dependency.rb +16 -4
  34. data/lib/bundler/deployment.rb +1 -1
  35. data/lib/bundler/dsl.rb +15 -39
  36. data/lib/bundler/env.rb +8 -13
  37. data/lib/bundler/environment_preserver.rb +0 -1
  38. data/lib/bundler/feature_flag.rb +23 -32
  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 +3 -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 -47
  74. data/lib/bundler/setup.rb +6 -5
  75. data/lib/bundler/shared_helpers.rb +64 -67
  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 +9 -5
  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 +23 -12
  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 -2
  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 +7 -2
  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 +2 -2
  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 +52 -36
  160. data/man/bundle-config.1.txt +82 -67
  161. data/man/bundle-config.ronn +56 -40
  162. data/man/bundle-doctor.1 +1 -1
  163. data/man/bundle-doctor.1.txt +1 -1
  164. data/man/bundle-exec.1 +2 -2
  165. data/man/bundle-exec.1.txt +2 -2
  166. data/man/bundle-exec.ronn +1 -1
  167. data/man/bundle-gem.1 +1 -1
  168. data/man/bundle-gem.1.txt +3 -3
  169. data/man/bundle-info.1 +1 -1
  170. data/man/bundle-info.1.txt +1 -1
  171. data/man/bundle-init.1 +2 -2
  172. data/man/bundle-init.1.txt +2 -2
  173. data/man/bundle-init.ronn +1 -1
  174. data/man/bundle-inject.1 +1 -1
  175. data/man/bundle-inject.1.txt +1 -1
  176. data/man/bundle-install.1 +8 -5
  177. data/man/bundle-install.1.txt +56 -51
  178. data/man/bundle-install.ronn +9 -4
  179. data/man/bundle-list.1 +1 -1
  180. data/man/bundle-list.1.txt +1 -1
  181. data/man/bundle-lock.1 +1 -1
  182. data/man/bundle-lock.1.txt +16 -16
  183. data/man/bundle-open.1 +1 -1
  184. data/man/bundle-open.1.txt +1 -1
  185. data/man/bundle-outdated.1 +1 -1
  186. data/man/bundle-outdated.1.txt +1 -1
  187. data/man/bundle-package.1 +1 -1
  188. data/man/bundle-package.1.txt +1 -1
  189. data/man/bundle-platform.1 +1 -1
  190. data/man/bundle-platform.1.txt +1 -1
  191. data/man/bundle-pristine.1 +1 -1
  192. data/man/bundle-pristine.1.txt +1 -1
  193. data/man/bundle-remove.1 +1 -1
  194. data/man/bundle-remove.1.txt +1 -1
  195. data/man/bundle-show.1 +1 -1
  196. data/man/bundle-show.1.txt +1 -1
  197. data/man/bundle-update.1 +4 -4
  198. data/man/bundle-update.1.txt +64 -65
  199. data/man/bundle-update.ronn +3 -3
  200. data/man/bundle-viz.1 +1 -1
  201. data/man/bundle-viz.1.txt +1 -1
  202. data/man/bundle.1 +7 -3
  203. data/man/bundle.1.txt +11 -8
  204. data/man/bundle.ronn +5 -2
  205. data/man/gemfile.5 +17 -20
  206. data/man/gemfile.5.ronn +14 -18
  207. data/man/gemfile.5.txt +108 -112
  208. metadata +17 -104
  209. data/exe/bundle_ruby +0 -60
  210. data/lib/bundler/cli/cache.rb +0 -36
  211. data/lib/bundler/compatibility_guard.rb +0 -14
  212. data/lib/bundler/ssl_certs/.document +0 -1
  213. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  214. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  215. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  216. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  217. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  218. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/fetcher/base"
3
+ require_relative "base"
4
4
  require "cgi"
5
5
 
6
6
  module Bundler
@@ -34,10 +34,13 @@ module Bundler
34
34
  fetch(uri, new_headers)
35
35
  when Net::HTTPRequestEntityTooLarge
36
36
  raise FallbackError, response.body
37
+ when Net::HTTPTooManyRequests
38
+ raise TooManyRequestsError, response.body
37
39
  when Net::HTTPUnauthorized
40
+ raise BadAuthenticationError, uri.host if uri.userinfo
38
41
  raise AuthenticationRequiredError, uri.host
39
42
  when Net::HTTPNotFound
40
- raise FallbackError, "Net::HTTPNotFound"
43
+ raise FallbackError, "Net::HTTPNotFound: #{URICredentialsFilter.credential_filtered_uri(uri)}"
41
44
  else
42
45
  raise HTTPError, "#{response.class}#{": #{response.body}" unless response.body.empty?}"
43
46
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/fetcher/base"
3
+ require_relative "base"
4
4
  require "rubygems/remote_fetcher"
5
5
 
6
6
  module Bundler
@@ -13,6 +13,7 @@ module Bundler
13
13
  when /certificate verify failed/
14
14
  raise CertificateFailureError.new(display_uri)
15
15
  when /401/
16
+ raise BadAuthenticationError, remote_uri if remote_uri.userinfo
16
17
  raise AuthenticationRequiredError, remote_uri
17
18
  when /403/
18
19
  raise BadAuthenticationError, remote_uri if remote_uri.userinfo
@@ -29,7 +30,8 @@ module Bundler
29
30
 
30
31
  uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
31
32
  if uri.scheme == "file"
32
- Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path))
33
+ path = Bundler.rubygems.correct_for_windows_path(uri.path)
34
+ Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
33
35
  elsif cached_spec_path = gemspec_cached_path(spec_file_name)
34
36
  Bundler.load_gemspec(cached_spec_path)
35
37
  else
@@ -1,8 +1,7 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require "cgi"
5
- require "bundler/vendored_thor"
4
+ require_relative "vendored_thor"
6
5
 
7
6
  module Bundler
8
7
  module FriendlyErrors
@@ -29,7 +28,7 @@ module Bundler
29
28
  Bundler.ui.warn <<-WARN, :wrap => true
30
29
  You must recompile Ruby with OpenSSL support or change the sources in your \
31
30
  Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL \
32
- using RVM are available at http://rvm.io/packages/openssl.
31
+ using RVM are available at https://rvm.io/packages/openssl.
33
32
  WARN
34
33
  Bundler.ui.trace error
35
34
  when Interrupt
@@ -45,7 +44,7 @@ module Bundler
45
44
  "Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB)."
46
45
  else request_issue_report_for(error)
47
46
  end
48
- rescue
47
+ rescue StandardError
49
48
  raise error
50
49
  end
51
50
 
@@ -124,7 +123,7 @@ module Bundler
124
123
  yield
125
124
  rescue SignalException
126
125
  raise
127
- rescue Exception => e
126
+ rescue Exception => e # rubocop:disable Lint/RescueException
128
127
  FriendlyErrors.log_error(e)
129
128
  exit FriendlyErrors.exit_status(e)
130
129
  end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/vendored_thor" unless defined?(Thor)
4
- require "bundler"
3
+ require_relative "vendored_thor" unless defined?(Thor)
4
+ require_relative "../bundler"
5
+ require "shellwords"
5
6
 
6
7
  module Bundler
7
8
  class GemHelper
@@ -74,7 +75,8 @@ module Bundler
74
75
 
75
76
  def build_gem
76
77
  file_name = nil
77
- sh("gem build -V '#{spec_path}'") do
78
+ gem = ENV["GEM_COMMAND"] ? ENV["GEM_COMMAND"] : "gem"
79
+ sh("#{gem} build -V #{spec_path}".shellsplit) do
78
80
  file_name = File.basename(built_gem_path)
79
81
  SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) }
80
82
  FileUtils.mv(built_gem_path, "pkg")
@@ -85,21 +87,26 @@ module Bundler
85
87
 
86
88
  def install_gem(built_gem_path = nil, local = false)
87
89
  built_gem_path ||= build_gem
88
- out, _ = sh_with_code("gem install '#{built_gem_path}'#{" --local" if local}")
89
- raise "Couldn't install gem, run `gem install #{built_gem_path}' for more detailed output" unless out[/Successfully installed/]
90
+ gem = ENV["GEM_COMMAND"] ? ENV["GEM_COMMAND"] : "gem"
91
+ cmd = "#{gem} install #{built_gem_path}"
92
+ cmd += " --local" if local
93
+ out, status = sh_with_status(cmd.shellsplit)
94
+ unless status.success? && out[/Successfully installed/]
95
+ raise "Couldn't install gem, run `gem install #{built_gem_path}' for more detailed output"
96
+ end
90
97
  Bundler.ui.confirm "#{name} (#{version}) installed."
91
98
  end
92
99
 
93
100
  protected
94
101
 
95
102
  def rubygem_push(path)
96
- gem_command = "gem push '#{path}'"
97
- gem_command += " --key #{gem_key}" if gem_key
98
- gem_command += " --host #{allowed_push_host}" if allowed_push_host
103
+ gem_command = %W[gem push #{path}]
104
+ gem_command << "--key" << gem_key if gem_key
105
+ gem_command << "--host" << allowed_push_host if allowed_push_host
99
106
  unless allowed_push_host || Bundler.user_home.join(".gem/credentials").file?
100
107
  raise "Your rubygems.org credentials aren't set. Run `gem push` to set them."
101
108
  end
102
- sh(gem_command)
109
+ sh_with_input(gem_command)
103
110
  Bundler.ui.confirm "Pushed #{name} #{version} to #{gem_push_host}"
104
111
  end
105
112
 
@@ -127,12 +134,14 @@ module Bundler
127
134
 
128
135
  def perform_git_push(options = "")
129
136
  cmd = "git push #{options}"
130
- out, code = sh_with_code(cmd)
131
- raise "Couldn't git push. `#{cmd}' failed with the following output:\n\n#{out}\n" unless code == 0
137
+ out, status = sh_with_status(cmd)
138
+ return if status.success?
139
+ cmd = cmd.shelljoin if cmd.respond_to?(:shelljoin)
140
+ raise "Couldn't git push. `#{cmd}' failed with the following output:\n\n#{out}\n"
132
141
  end
133
142
 
134
143
  def already_tagged?
135
- return false unless sh("git tag").split(/\n/).include?(version_tag)
144
+ return false unless sh(%w[git tag]).split(/\n/).include?(version_tag)
136
145
  Bundler.ui.confirm "Tag #{version_tag} has already been created."
137
146
  true
138
147
  end
@@ -142,20 +151,20 @@ module Bundler
142
151
  end
143
152
 
144
153
  def clean?
145
- sh_with_code("git diff --exit-code")[1] == 0
154
+ sh_with_status(%w[git diff --exit-code])[1].success?
146
155
  end
147
156
 
148
157
  def committed?
149
- sh_with_code("git diff-index --quiet --cached HEAD")[1] == 0
158
+ sh_with_status(%w[git diff-index --quiet --cached HEAD])[1].success?
150
159
  end
151
160
 
152
161
  def tag_version
153
- sh "git tag -m \"Version #{version}\" #{version_tag}"
162
+ sh %W[git tag -m Version\ #{version} #{version_tag}]
154
163
  Bundler.ui.confirm "Tagged #{version_tag}."
155
164
  yield if block_given?
156
165
  rescue RuntimeError
157
166
  Bundler.ui.error "Untagging #{version_tag} due to error."
158
- sh_with_code "git tag -d #{version_tag}"
167
+ sh_with_status %W[git tag -d #{version_tag}]
159
168
  raise
160
169
  end
161
170
 
@@ -171,22 +180,28 @@ module Bundler
171
180
  gemspec.name
172
181
  end
173
182
 
183
+ def sh_with_input(cmd)
184
+ Bundler.ui.debug(cmd)
185
+ SharedHelpers.chdir(base) do
186
+ abort unless Kernel.system(*cmd)
187
+ end
188
+ end
189
+
174
190
  def sh(cmd, &block)
175
- out, code = sh_with_code(cmd, &block)
176
- unless code.zero?
191
+ out, status = sh_with_status(cmd, &block)
192
+ unless status.success?
193
+ cmd = cmd.shelljoin if cmd.respond_to?(:shelljoin)
177
194
  raise(out.empty? ? "Running `#{cmd}` failed. Run this command directly for more detailed output." : out)
178
195
  end
179
196
  out
180
197
  end
181
198
 
182
- def sh_with_code(cmd, &block)
183
- cmd += " 2>&1"
184
- outbuf = String.new
199
+ def sh_with_status(cmd, &block)
185
200
  Bundler.ui.debug(cmd)
186
201
  SharedHelpers.chdir(base) do
187
- outbuf = `#{cmd}`
188
- status = $?.exitstatus
189
- block.call(outbuf) if status.zero? && block
202
+ outbuf = IO.popen(cmd, :err => [:child, :out], &:read)
203
+ status = $?
204
+ block.call(outbuf) if status.success? && block
190
205
  [outbuf, status]
191
206
  end
192
207
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bundler
4
4
  module GemHelpers
5
- GENERIC_CACHE = {} # rubocop:disable MutableConstant
5
+ GENERIC_CACHE = { Gem::Platform::RUBY => Gem::Platform::RUBY } # rubocop:disable MutableConstant
6
6
  GENERICS = [
7
7
  [Gem::Platform.new("java"), Gem::Platform.new("java")],
8
8
  [Gem::Platform.new("mswin32"), Gem::Platform.new("mswin32")],
@@ -10,12 +10,10 @@ module Bundler
10
10
  [Gem::Platform.new("universal-mingw32"), Gem::Platform.new("universal-mingw32")],
11
11
  [Gem::Platform.new("x64-mingw32"), Gem::Platform.new("x64-mingw32")],
12
12
  [Gem::Platform.new("x86_64-mingw32"), Gem::Platform.new("x64-mingw32")],
13
- [Gem::Platform.new("mingw32"), Gem::Platform.new("x86-mingw32")]
13
+ [Gem::Platform.new("mingw32"), Gem::Platform.new("x86-mingw32")],
14
14
  ].freeze
15
15
 
16
16
  def generic(p)
17
- return p if p == Gem::Platform::RUBY
18
-
19
17
  GENERIC_CACHE[p] ||= begin
20
18
  _, found = GENERICS.find do |match, _generic|
21
19
  p.os == match.os && (!match.cpu || p.cpu == match.cpu)
@@ -3,5 +3,5 @@
3
3
  require "rake/clean"
4
4
  CLOBBER.include "pkg"
5
5
 
6
- require "bundler/gem_helper"
6
+ require_relative "gem_helper"
7
7
  Bundler::GemHelper.install_tasks
@@ -81,8 +81,8 @@ module Bundler
81
81
  sort_dep_specs(spec_groups, locked_spec)
82
82
  end.tap do |specs|
83
83
  if DEBUG
84
- STDERR.puts before_result
85
- STDERR.puts " after sort_versions: #{debug_format_result(dep, specs).inspect}"
84
+ warn before_result
85
+ warn " after sort_versions: #{debug_format_result(dep, specs).inspect}"
86
86
  end
87
87
  end
88
88
  end
@@ -109,7 +109,7 @@ module Bundler
109
109
  must_match = minor? ? [0] : [0, 1]
110
110
 
111
111
  matches = must_match.map {|idx| gsv.segments[idx] == lsv.segments[idx] }
112
- (matches.uniq == [true]) ? (gsv >= lsv) : false
112
+ matches.uniq == [true] ? (gsv >= lsv) : false
113
113
  else
114
114
  true
115
115
  end
@@ -117,7 +117,7 @@ module Bundler
117
117
  :style => "filled",
118
118
  :fillcolor => "#B9B9D5",
119
119
  :shape => "box3d",
120
- :fontsize => 16
120
+ :fontsize => 16,
121
121
  }.merge(@node_options[group])
122
122
  )
123
123
  end
@@ -142,7 +142,7 @@ module Bundler
142
142
  g.output @output_format.to_sym => "#{@output_file}.#{@output_format}"
143
143
  Bundler.ui.info "#{@output_file}.#{@output_format}"
144
144
  rescue ArgumentError => e
145
- $stderr.puts "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb"
145
+ warn "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb"
146
146
  raise e
147
147
  end
148
148
  end
@@ -111,8 +111,10 @@ module Bundler
111
111
  end
112
112
 
113
113
  source = ", :source => \"#{d.source}\"" unless d.source.nil?
114
+ git = ", :git => \"#{d.git}\"" unless d.git.nil?
115
+ branch = ", :branch => \"#{d.branch}\"" unless d.branch.nil?
114
116
 
115
- %(gem #{name}#{requirement}#{group}#{source})
117
+ %(gem #{name}#{requirement}#{group}#{source}#{git}#{branch})
116
118
  end.join("\n")
117
119
  end
118
120
 
@@ -123,7 +125,7 @@ module Bundler
123
125
  end
124
126
  end
125
127
 
126
- # evalutes a gemfile to remove the specified gem
128
+ # evaluates a gemfile to remove the specified gem
127
129
  # from it.
128
130
  def remove_deps(gemfile_path)
129
131
  initial_gemfile = IO.readlines(gemfile_path)
@@ -136,8 +138,8 @@ module Bundler
136
138
 
137
139
  removed_deps = remove_gems_from_dependencies(builder, @deps, gemfile_path)
138
140
 
139
- # abort the opertion if no gems were removed
140
- # no need to operate on gemfile furthur
141
+ # abort the operation if no gems were removed
142
+ # no need to operate on gemfile further
141
143
  return [] if removed_deps.empty?
142
144
 
143
145
  cleaned_gemfile = remove_gems_from_gemfile(@deps, gemfile_path)
@@ -153,8 +155,8 @@ module Bundler
153
155
 
154
156
  # @param [Dsl] builder Dsl object of current Gemfile.
155
157
  # @param [Array] gems Array of names of gems to be removed.
156
- # @param [Pathname] path of the Gemfile
157
- # @return [Array] removed_deps Array of removed dependencies.
158
+ # @param [Pathname] gemfile_path Path of the Gemfile.
159
+ # @return [Array] Array of removed dependencies.
158
160
  def remove_gems_from_dependencies(builder, gems, gemfile_path)
159
161
  removed_deps = []
160
162
 
@@ -206,7 +208,7 @@ module Bundler
206
208
  nested_blocks -= 1
207
209
 
208
210
  gemfile.each_with_index do |line, index|
209
- next unless !line.nil? && line.include?(block_name)
211
+ next unless !line.nil? && line.strip.start_with?(block_name)
210
212
  if gemfile[index + 1] =~ /^\s*end\s*$/
211
213
  gemfile[index] = nil
212
214
  gemfile[index + 1] = nil
@@ -222,7 +224,7 @@ module Bundler
222
224
  # @param [Array] removed_deps Array of removed dependencies.
223
225
  # @param [Array] initial_gemfile Contents of original Gemfile before any operation.
224
226
  def cross_check_for_errors(gemfile_path, original_deps, removed_deps, initial_gemfile)
225
- # evalute the new gemfile to look for any failure cases
227
+ # evaluate the new gemfile to look for any failure cases
226
228
  builder = Dsl.new
227
229
  builder.eval_gemfile(gemfile_path)
228
230
 
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/compatibility_guard"
4
-
5
3
  # Allows for declaring a Gemfile inline in a ruby script, optionally installing
6
4
  # any gems that aren't already installed on the user's system.
7
5
  #
@@ -32,10 +30,11 @@ require "bundler/compatibility_guard"
32
30
  # puts Pod::VERSION # => "0.34.4"
33
31
  #
34
32
  def gemfile(install = false, options = {}, &gemfile)
35
- require "bundler"
33
+ require_relative "../bundler"
36
34
 
37
35
  opts = options.dup
38
36
  ui = opts.delete(:ui) { Bundler::UI::Shell.new }
37
+ ui.level = "silent" if opts.delete(:quiet)
39
38
  raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
40
39
 
41
40
  old_root = Bundler.method(:root)
@@ -48,26 +47,28 @@ def gemfile(install = false, options = {}, &gemfile)
48
47
  builder = Bundler::Dsl.new
49
48
  builder.instance_eval(&gemfile)
50
49
 
51
- definition = builder.to_definition(nil, true)
52
- def definition.lock(*); end
53
- definition.validate_runtime!
50
+ Bundler.settings.temporary(:frozen => false) do
51
+ definition = builder.to_definition(nil, true)
52
+ def definition.lock(*); end
53
+ definition.validate_runtime!
54
54
 
55
- missing_specs = proc do
56
- definition.missing_specs?
57
- end
55
+ missing_specs = proc do
56
+ definition.missing_specs?
57
+ end
58
58
 
59
- Bundler.ui = ui if install
60
- if install || missing_specs.call
61
- Bundler.settings.temporary(:inline => true) do
62
- installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
63
- installer.post_install_messages.each do |name, message|
64
- Bundler.ui.info "Post-install message from #{name}:\n#{message}"
59
+ Bundler.ui = ui if install
60
+ if install || missing_specs.call
61
+ Bundler.settings.temporary(:inline => true, :disable_platform_warnings => true) do
62
+ installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
63
+ installer.post_install_messages.each do |name, message|
64
+ Bundler.ui.info "Post-install message from #{name}:\n#{message}"
65
+ end
65
66
  end
66
67
  end
67
- end
68
68
 
69
- runtime = Bundler::Runtime.new(nil, definition)
70
- runtime.setup.require
69
+ runtime = Bundler::Runtime.new(nil, definition)
70
+ runtime.setup.require
71
+ end
71
72
  ensure
72
73
  bundler_module = class << Bundler; self; end
73
74
  bundler_module.send(:define_method, :root, old_root) if old_root
@@ -2,10 +2,10 @@
2
2
 
3
3
  require "erb"
4
4
  require "rubygems/dependency_installer"
5
- require "bundler/worker"
6
- require "bundler/installer/parallel_installer"
7
- require "bundler/installer/standalone"
8
- require "bundler/installer/gem_installer"
5
+ require_relative "worker"
6
+ require_relative "installer/parallel_installer"
7
+ require_relative "installer/standalone"
8
+ require_relative "installer/gem_installer"
9
9
 
10
10
  module Bundler
11
11
  class Installer
@@ -221,7 +221,7 @@ module Bundler
221
221
  def processor_count
222
222
  require "etc"
223
223
  Etc.nprocessors
224
- rescue
224
+ rescue StandardError
225
225
  1
226
226
  end
227
227
 
@@ -275,14 +275,7 @@ module Bundler
275
275
  end
276
276
 
277
277
  def can_install_in_parallel?
278
- if Bundler.rubygems.provides?(">= 2.1.0")
279
- true
280
- else
281
- Bundler.ui.warn "RubyGems #{Gem::VERSION} is not threadsafe, so your "\
282
- "gems will be installed one at a time. Upgrade to RubyGems 2.1.0 " \
283
- "or higher to enable parallel gem installation."
284
- false
285
- end
278
+ true
286
279
  end
287
280
 
288
281
  def install_in_parallel(size, standalone, force = false)
@@ -303,7 +296,7 @@ module Bundler
303
296
 
304
297
  # returns whether or not a re-resolve was needed
305
298
  def resolve_if_needed(options)
306
- if !@definition.unlocking? && !options["force"] && !Bundler.settings[:inline] && Bundler.default_lockfile.file?
299
+ if !@definition.unlocking? && !options["force"] && !options["all-platforms"] && !Bundler.settings[:inline] && Bundler.default_lockfile.file?
307
300
  return false if @definition.nothing_changed? && !@definition.missing_specs?
308
301
  end
309
302