bundler 1.15.1 → 1.17.3

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 (294) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +320 -0
  3. data/README.md +17 -8
  4. data/bundler.gemspec +25 -9
  5. data/exe/bundle +1 -6
  6. data/exe/bundle_ruby +4 -3
  7. data/lib/bundler/build_metadata.rb +53 -0
  8. data/lib/bundler/capistrano.rb +5 -0
  9. data/lib/bundler/cli/add.rb +15 -6
  10. data/lib/bundler/cli/binstubs.rb +17 -9
  11. data/lib/bundler/cli/cache.rb +5 -4
  12. data/lib/bundler/cli/check.rb +3 -5
  13. data/lib/bundler/cli/clean.rb +5 -6
  14. data/lib/bundler/cli/common.rb +11 -2
  15. data/lib/bundler/cli/config.rb +2 -1
  16. data/lib/bundler/cli/console.rb +2 -1
  17. data/lib/bundler/cli/doctor.rb +48 -1
  18. data/lib/bundler/cli/exec.rb +6 -5
  19. data/lib/bundler/cli/gem.rb +13 -8
  20. data/lib/bundler/cli/info.rb +0 -1
  21. data/lib/bundler/cli/init.rb +18 -6
  22. data/lib/bundler/cli/inject.rb +1 -0
  23. data/lib/bundler/cli/install.rb +64 -77
  24. data/lib/bundler/cli/issue.rb +1 -1
  25. data/lib/bundler/cli/list.rb +58 -0
  26. data/lib/bundler/cli/lock.rb +0 -1
  27. data/lib/bundler/cli/open.rb +2 -2
  28. data/lib/bundler/cli/outdated.rb +20 -9
  29. data/lib/bundler/cli/package.rb +9 -6
  30. data/lib/bundler/cli/platform.rb +1 -0
  31. data/lib/bundler/cli/plugin.rb +1 -0
  32. data/lib/bundler/cli/pristine.rb +20 -6
  33. data/lib/bundler/cli/remove.rb +18 -0
  34. data/lib/bundler/cli/show.rb +0 -1
  35. data/lib/bundler/cli/update.rb +35 -7
  36. data/lib/bundler/cli/viz.rb +4 -0
  37. data/lib/bundler/cli.rb +234 -90
  38. data/lib/bundler/compact_index_client/cache.rb +1 -2
  39. data/lib/bundler/compact_index_client/updater.rb +35 -7
  40. data/lib/bundler/compact_index_client.rb +1 -0
  41. data/lib/bundler/compatibility_guard.rb +14 -0
  42. data/lib/bundler/constants.rb +1 -0
  43. data/lib/bundler/current_ruby.rb +13 -5
  44. data/lib/bundler/definition.rb +192 -139
  45. data/lib/bundler/dep_proxy.rb +3 -1
  46. data/lib/bundler/dependency.rb +9 -9
  47. data/lib/bundler/deployment.rb +1 -1
  48. data/lib/bundler/deprecate.rb +15 -3
  49. data/lib/bundler/dsl.rb +115 -64
  50. data/lib/bundler/endpoint_specification.rb +10 -1
  51. data/lib/bundler/env.rb +90 -29
  52. data/lib/bundler/environment_preserver.rb +27 -6
  53. data/lib/bundler/errors.rb +1 -0
  54. data/lib/bundler/feature_flag.rb +46 -4
  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 +2 -1
  58. data/lib/bundler/fetcher/downloader.rb +11 -5
  59. data/lib/bundler/fetcher/index.rb +3 -2
  60. data/lib/bundler/fetcher.rb +18 -11
  61. data/lib/bundler/friendly_errors.rb +6 -1
  62. data/lib/bundler/gem_helper.rb +19 -10
  63. data/lib/bundler/gem_helpers.rb +1 -0
  64. data/lib/bundler/gem_remote_fetcher.rb +1 -0
  65. data/lib/bundler/gem_tasks.rb +1 -0
  66. data/lib/bundler/gem_version_promoter.rb +17 -2
  67. data/lib/bundler/gemdeps.rb +1 -0
  68. data/lib/bundler/graph.rb +1 -0
  69. data/lib/bundler/index.rb +8 -8
  70. data/lib/bundler/injector.rb +192 -30
  71. data/lib/bundler/inline.rb +10 -10
  72. data/lib/bundler/installer/gem_installer.rb +12 -2
  73. data/lib/bundler/installer/parallel_installer.rb +78 -42
  74. data/lib/bundler/installer/standalone.rb +1 -0
  75. data/lib/bundler/installer.rb +138 -53
  76. data/lib/bundler/lazy_specification.rb +3 -2
  77. data/lib/bundler/lockfile_generator.rb +95 -0
  78. data/lib/bundler/lockfile_parser.rb +10 -4
  79. data/lib/bundler/match_platform.rb +1 -0
  80. data/lib/bundler/mirror.rb +8 -5
  81. data/lib/bundler/plugin/api/source.rb +9 -2
  82. data/lib/bundler/plugin/events.rb +61 -0
  83. data/lib/bundler/plugin/index.rb +7 -2
  84. data/lib/bundler/plugin/installer.rb +7 -6
  85. data/lib/bundler/plugin/source_list.rb +7 -8
  86. data/lib/bundler/plugin.rb +13 -5
  87. data/lib/bundler/process_lock.rb +24 -0
  88. data/lib/bundler/psyched_yaml.rb +10 -0
  89. data/lib/bundler/remote_specification.rb +10 -1
  90. data/lib/bundler/resolver/spec_group.rb +106 -0
  91. data/lib/bundler/resolver.rb +158 -195
  92. data/lib/bundler/retry.rb +1 -0
  93. data/lib/bundler/ruby_dsl.rb +1 -0
  94. data/lib/bundler/ruby_version.rb +2 -1
  95. data/lib/bundler/rubygems_ext.rb +5 -4
  96. data/lib/bundler/rubygems_gem_installer.rb +31 -1
  97. data/lib/bundler/rubygems_integration.rb +71 -32
  98. data/lib/bundler/runtime.rb +11 -9
  99. data/lib/bundler/settings/validator.rb +102 -0
  100. data/lib/bundler/settings.rb +213 -86
  101. data/lib/bundler/setup.rb +4 -7
  102. data/lib/bundler/shared_helpers.rb +131 -26
  103. data/lib/bundler/similarity_detector.rb +1 -0
  104. data/lib/bundler/source/gemspec.rb +1 -0
  105. data/lib/bundler/source/git/git_proxy.rb +21 -11
  106. data/lib/bundler/source/git.rb +24 -19
  107. data/lib/bundler/source/metadata.rb +62 -0
  108. data/lib/bundler/source/path/installer.rb +2 -0
  109. data/lib/bundler/source/path.rb +11 -7
  110. data/lib/bundler/source/rubygems/remote.rb +8 -2
  111. data/lib/bundler/source/rubygems.rb +161 -84
  112. data/lib/bundler/source.rb +36 -0
  113. data/lib/bundler/source_list.rb +75 -15
  114. data/lib/bundler/spec_set.rb +12 -6
  115. data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
  116. data/lib/bundler/stub_specification.rb +1 -0
  117. data/lib/bundler/templates/.document +1 -0
  118. data/lib/bundler/templates/Executable +12 -0
  119. data/lib/bundler/templates/Executable.bundler +105 -0
  120. data/lib/bundler/templates/Gemfile +3 -0
  121. data/lib/bundler/templates/gems.rb +8 -0
  122. data/lib/bundler/templates/newgem/Gemfile.tt +2 -0
  123. data/lib/bundler/templates/newgem/README.md.tt +1 -1
  124. data/lib/bundler/templates/newgem/gitignore.tt +0 -1
  125. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
  126. data/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -3
  127. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  128. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
  129. data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
  130. data/lib/bundler/ui/rg_proxy.rb +1 -0
  131. data/lib/bundler/ui/shell.rb +17 -4
  132. data/lib/bundler/ui/silent.rb +1 -0
  133. data/lib/bundler/ui.rb +1 -0
  134. data/lib/bundler/uri_credentials_filter.rb +1 -0
  135. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  136. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  137. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  138. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  139. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  140. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -0
  141. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
  142. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
  143. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
  144. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
  145. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
  146. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
  147. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +15 -4
  148. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -2
  149. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +75 -7
  150. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  151. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  152. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
  153. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +491 -148
  154. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
  155. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
  156. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
  157. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +3 -1
  158. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -0
  159. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -0
  160. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +9 -1
  161. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +45 -8
  162. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +9 -3
  163. data/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -3
  164. data/lib/bundler/vendor/thor/lib/thor/base.rb +27 -4
  165. data/lib/bundler/vendor/thor/lib/thor/command.rb +9 -7
  166. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +12 -0
  167. data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  168. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
  169. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +5 -5
  170. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +6 -5
  171. data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -4
  172. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +10 -9
  173. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  174. data/lib/bundler/vendor/thor/lib/thor.rb +25 -8
  175. data/lib/bundler/vendored_fileutils.rb +9 -0
  176. data/lib/bundler/vendored_molinillo.rb +1 -0
  177. data/lib/bundler/vendored_persistent.rb +35 -0
  178. data/lib/bundler/vendored_thor.rb +1 -0
  179. data/lib/bundler/version.rb +6 -2
  180. data/lib/bundler/version_ranges.rb +1 -0
  181. data/lib/bundler/vlad.rb +5 -0
  182. data/lib/bundler/worker.rb +1 -0
  183. data/lib/bundler/yaml_serializer.rb +3 -3
  184. data/lib/bundler.rb +86 -52
  185. data/man/bundle-add.1 +18 -3
  186. data/man/bundle-add.1.txt +26 -14
  187. data/man/bundle-add.ronn +13 -2
  188. data/man/bundle-binstubs.1 +11 -1
  189. data/man/bundle-binstubs.1.txt +33 -18
  190. data/man/bundle-binstubs.ronn +15 -1
  191. data/man/bundle-check.1 +4 -4
  192. data/man/bundle-check.1.txt +15 -14
  193. data/man/bundle-check.ronn +3 -3
  194. data/man/bundle-clean.1 +1 -1
  195. data/man/bundle-clean.1.txt +10 -10
  196. data/man/bundle-config.1 +129 -29
  197. data/man/bundle-config.1.txt +285 -174
  198. data/man/bundle-config.ronn +167 -88
  199. data/man/bundle-doctor.1 +44 -0
  200. data/man/bundle-doctor.1.txt +44 -0
  201. data/man/bundle-doctor.ronn +33 -0
  202. data/man/bundle-exec.1 +6 -3
  203. data/man/bundle-exec.1.txt +78 -71
  204. data/man/bundle-exec.ronn +10 -3
  205. data/man/bundle-gem.1 +4 -4
  206. data/man/bundle-gem.1.txt +41 -40
  207. data/man/bundle-gem.ronn +3 -2
  208. data/man/bundle-info.1 +1 -1
  209. data/man/bundle-info.1.txt +8 -8
  210. data/man/bundle-init.1 +9 -4
  211. data/man/bundle-init.1.txt +23 -13
  212. data/man/bundle-init.ronn +15 -4
  213. data/man/bundle-inject.1 +4 -4
  214. data/man/bundle-inject.1.txt +10 -10
  215. data/man/bundle-inject.ronn +3 -3
  216. data/man/bundle-install.1 +31 -28
  217. data/man/bundle-install.1.txt +205 -194
  218. data/man/bundle-install.ronn +44 -35
  219. data/man/bundle-list.1 +50 -0
  220. data/man/bundle-list.1.txt +43 -0
  221. data/man/bundle-list.ronn +33 -0
  222. data/man/bundle-lock.1 +1 -1
  223. data/man/bundle-lock.1.txt +47 -47
  224. data/man/bundle-lock.ronn +1 -1
  225. data/man/bundle-open.1 +1 -1
  226. data/man/bundle-open.1.txt +7 -7
  227. data/man/bundle-outdated.1 +7 -3
  228. data/man/bundle-outdated.1.txt +40 -36
  229. data/man/bundle-outdated.ronn +6 -2
  230. data/man/bundle-package.1 +6 -3
  231. data/man/bundle-package.1.txt +44 -39
  232. data/man/bundle-package.ronn +7 -2
  233. data/man/bundle-platform.1 +1 -1
  234. data/man/bundle-platform.1.txt +13 -13
  235. data/man/bundle-pristine.1 +21 -3
  236. data/man/bundle-pristine.1.txt +33 -10
  237. data/man/bundle-pristine.ronn +24 -3
  238. data/man/bundle-remove.1 +31 -0
  239. data/man/bundle-remove.1.txt +34 -0
  240. data/man/bundle-remove.ronn +23 -0
  241. data/man/bundle-show.1 +3 -3
  242. data/man/bundle-show.1.txt +14 -12
  243. data/man/bundle-show.ronn +3 -2
  244. data/man/bundle-update.1 +13 -9
  245. data/man/bundle-update.1.txt +133 -130
  246. data/man/bundle-update.ronn +21 -17
  247. data/man/bundle-viz.1 +7 -7
  248. data/man/bundle-viz.1.txt +17 -15
  249. data/man/bundle-viz.ronn +6 -6
  250. data/man/bundle.1 +31 -32
  251. data/man/bundle.1.txt +63 -75
  252. data/man/bundle.ronn +35 -47
  253. data/man/gemfile.5 +44 -8
  254. data/man/gemfile.5.ronn +54 -8
  255. data/man/gemfile.5.txt +218 -165
  256. data/man/index.txt +25 -15
  257. metadata +36 -44
  258. data/.codeclimate.yml +0 -25
  259. data/.gitignore +0 -18
  260. data/.rspec +0 -3
  261. data/.rubocop.yml +0 -131
  262. data/.rubocop_todo.yml +0 -418
  263. data/.travis.yml +0 -122
  264. data/CODE_OF_CONDUCT.md +0 -42
  265. data/CONTRIBUTING.md +0 -17
  266. data/Rakefile +0 -346
  267. data/bin/rake +0 -19
  268. data/bin/rspec +0 -15
  269. data/bin/rubocop +0 -17
  270. data/bin/with_rubygems +0 -39
  271. data/doc/README.md +0 -30
  272. data/doc/TROUBLESHOOTING.md +0 -64
  273. data/doc/contributing/BUG_TRIAGE.md +0 -36
  274. data/doc/contributing/COMMUNITY.md +0 -13
  275. data/doc/contributing/GETTING_HELP.md +0 -11
  276. data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
  277. data/doc/contributing/ISSUES.md +0 -51
  278. data/doc/contributing/README.md +0 -38
  279. data/doc/development/NEW_FEATURES.md +0 -10
  280. data/doc/development/PULL_REQUESTS.md +0 -40
  281. data/doc/development/README.md +0 -19
  282. data/doc/development/RELEASING.md +0 -9
  283. data/doc/development/SETUP.md +0 -29
  284. data/doc/documentation/README.md +0 -29
  285. data/doc/documentation/VISION.md +0 -26
  286. data/doc/documentation/WRITING.md +0 -54
  287. data/lib/bundler/postit_trampoline.rb +0 -73
  288. data/lib/bundler/vendor/postit/lib/postit/environment.rb +0 -44
  289. data/lib/bundler/vendor/postit/lib/postit/installer.rb +0 -28
  290. data/lib/bundler/vendor/postit/lib/postit/parser.rb +0 -21
  291. data/lib/bundler/vendor/postit/lib/postit/setup.rb +0 -12
  292. data/lib/bundler/vendor/postit/lib/postit/version.rb +0 -3
  293. data/lib/bundler/vendor/postit/lib/postit.rb +0 -15
  294. data/task/release.rake +0 -116
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "bundler/cli/common"
3
2
 
4
3
  module Bundler
5
4
  class CLI::Binstubs
@@ -11,11 +10,19 @@ module Bundler
11
10
 
12
11
  def run
13
12
  Bundler.definition.validate_runtime!
14
- Bundler.settings[:bin] = options["path"] if options["path"]
15
- Bundler.settings[:bin] = nil if options["path"] && options["path"].empty?
13
+ path_option = options["path"]
14
+ path_option = nil if path_option && path_option.empty?
15
+ Bundler.settings.set_command_option :bin, path_option if options["path"]
16
+ Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
16
17
  installer = Installer.new(Bundler.root, Bundler.definition)
17
18
 
18
- if gems.empty?
19
+ installer_opts = { :force => options[:force], :binstubs_cmd => true }
20
+
21
+ if options[:all]
22
+ raise InvalidOption, "Cannot specify --all with specific gems" unless gems.empty?
23
+ @gems = Bundler.definition.specs.map(&:name)
24
+ installer_opts.delete(:binstubs_cmd)
25
+ elsif gems.empty?
19
26
  Bundler.ui.error "`bundle binstubs` needs at least one gem to run."
20
27
  exit 1
21
28
  end
@@ -28,12 +35,13 @@ module Bundler
28
35
  )
29
36
  end
30
37
 
31
- if spec.name == "bundler"
32
- Bundler.ui.warn "Sorry, Bundler can only be run via Rubygems."
33
- elsif options[:standalone]
34
- installer.generate_standalone_bundler_executable_stubs(spec)
38
+ if options[:standalone]
39
+ next Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") if gem_name == "bundler"
40
+ Bundler.settings.temporary(:path => (Bundler.settings[:path] || Bundler.root)) do
41
+ installer.generate_standalone_bundler_executable_stubs(spec)
42
+ end
35
43
  else
36
- installer.generate_bundler_executable_stubs(spec, :force => options[:force], :binstubs_cmd => true)
44
+ installer.generate_bundler_executable_stubs(spec, installer_opts)
37
45
  end
38
46
  end
39
47
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Cache
4
5
  attr_reader :options
@@ -10,9 +11,9 @@ module Bundler
10
11
  Bundler.definition.validate_runtime!
11
12
  Bundler.definition.resolve_with_cache!
12
13
  setup_cache_all
13
- Bundler.settings[:cache_all_platforms] = options["all-platforms"] if options.key?("all-platforms")
14
+ Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
14
15
  Bundler.load.cache
15
- Bundler.settings[:no_prune] = true if options["no-prune"]
16
+ Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
16
17
  Bundler.load.lock
17
18
  rescue GemNotFound => e
18
19
  Bundler.ui.error(e.message)
@@ -23,9 +24,9 @@ module Bundler
23
24
  private
24
25
 
25
26
  def setup_cache_all
26
- Bundler.settings[:cache_all] = options[:all] if options.key?("all")
27
+ Bundler.settings.set_command_option_if_given :cache_all, options[:all]
27
28
 
28
- if Bundler.definition.has_local_dependencies? && !Bundler.settings[:cache_all]
29
+ if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
29
30
  Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
30
31
  "to package them as well, please pass the --all flag. This will be the default " \
31
32
  "on Bundler 2.0."
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Check
4
5
  attr_reader :options
@@ -8,10 +9,7 @@ module Bundler
8
9
  end
9
10
 
10
11
  def run
11
- if options[:path]
12
- Bundler.settings[:path] = File.expand_path(options[:path])
13
- Bundler.settings[:disable_shared_gems] = true
14
- end
12
+ Bundler.settings.set_command_option_if_given :path, options[:path]
15
13
 
16
14
  begin
17
15
  definition = Bundler.definition
@@ -28,7 +26,7 @@ module Bundler
28
26
  not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
29
27
  Bundler.ui.warn "Install missing gems with `bundle install`"
30
28
  exit 1
31
- elsif !Bundler.default_lockfile.file? && Bundler.settings[:frozen]
29
+ elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
32
30
  Bundler.ui.error "This bundle has been frozen, but there is no #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} present"
33
31
  exit 1
34
32
  else
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Clean
4
5
  attr_reader :options
@@ -15,12 +16,10 @@ module Bundler
15
16
  protected
16
17
 
17
18
  def require_path_or_force
18
- if !Bundler.settings[:path] && !options[:force]
19
- Bundler.ui.error "Cleaning all the gems on your system is dangerous! " \
20
- "If you're sure you want to remove every system gem not in this " \
21
- "bundle, run `bundle clean --force`."
22
- exit 1
23
- end
19
+ return unless Bundler.use_system_gems? && !options[:force]
20
+ raise InvalidOption, "Cleaning all the gems on your system is dangerous! " \
21
+ "If you're sure you want to remove every system gem not in this " \
22
+ "bundle, run `bundle clean --force`."
24
23
  end
25
24
  end
26
25
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  module CLI::Common
4
5
  def self.output_post_install_messages(messages)
@@ -14,12 +15,12 @@ module Bundler
14
15
  end
15
16
 
16
17
  def self.output_without_groups_message
17
- return unless Bundler.settings.without.any?
18
+ return if Bundler.settings[:without].empty?
18
19
  Bundler.ui.confirm without_groups_message
19
20
  end
20
21
 
21
22
  def self.without_groups_message
22
- groups = Bundler.settings.without
23
+ groups = Bundler.settings[:without]
23
24
  group_list = [groups[0...-1].join(", "), groups[-1..-1]].
24
25
  reject {|s| s.to_s.empty? }.join(" and ")
25
26
  group_str = (groups.size == 1) ? "group" : "groups"
@@ -89,5 +90,13 @@ module Bundler
89
90
  def self.patch_level_options(options)
90
91
  [:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
91
92
  end
93
+
94
+ def self.clean_after_install?
95
+ clean = Bundler.settings[:clean]
96
+ return clean unless clean.nil?
97
+ clean ||= Bundler.feature_flag.auto_clean_without_path? && Bundler.settings[:path].nil?
98
+ clean &&= !Bundler.use_system_gems?
99
+ clean
100
+ end
92
101
  end
93
102
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Config
4
5
  attr_reader :name, :options, :scope, :thor
@@ -112,7 +113,7 @@ module Bundler
112
113
  end
113
114
 
114
115
  def valid_scope?(scope)
115
- %w(delete local global).include?(scope)
116
+ %w[delete local global].include?(scope)
116
117
  end
117
118
  end
118
119
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Console
4
5
  attr_reader :options, :group
@@ -8,7 +9,7 @@ module Bundler
8
9
  end
9
10
 
10
11
  def run
11
- Bundler::SharedHelpers.major_deprecation "bundle console will be replaced " \
12
+ Bundler::SharedHelpers.major_deprecation 2, "bundle console will be replaced " \
12
13
  "by `bin/console` generated by `bundle gem <name>`"
13
14
 
14
15
  group ? Bundler.require(:default, *(group.split.map!(&:to_sym))) : Bundler.require
@@ -62,6 +62,7 @@ module Bundler
62
62
 
63
63
  def run
64
64
  Bundler.ui.level = "error" if options[:quiet]
65
+ Bundler.settings.validate!
65
66
  check!
66
67
 
67
68
  definition = Bundler.definition
@@ -77,6 +78,8 @@ module Bundler
77
78
  end
78
79
  end
79
80
 
81
+ permissions_valid = check_home_permissions
82
+
80
83
  if broken_links.any?
81
84
  message = "The following gems are missing OS dependencies:"
82
85
  broken_links.map do |spec, paths|
@@ -85,9 +88,53 @@ module Bundler
85
88
  end
86
89
  end.flatten.sort.each {|m| message += m }
87
90
  raise ProductionError, message
88
- else
91
+ elsif !permissions_valid
89
92
  Bundler.ui.info "No issues found with the installed bundle"
90
93
  end
91
94
  end
95
+
96
+ private
97
+
98
+ def check_home_permissions
99
+ require "find"
100
+ files_not_readable_or_writable = []
101
+ files_not_rw_and_owned_by_different_user = []
102
+ files_not_owned_by_current_user_but_still_rw = []
103
+ Find.find(Bundler.home.to_s).each do |f|
104
+ if !File.writable?(f) || !File.readable?(f)
105
+ if File.stat(f).uid != Process.uid
106
+ files_not_rw_and_owned_by_different_user << f
107
+ else
108
+ files_not_readable_or_writable << f
109
+ end
110
+ elsif File.stat(f).uid != Process.uid
111
+ files_not_owned_by_current_user_but_still_rw << f
112
+ end
113
+ end
114
+
115
+ ok = true
116
+ if files_not_owned_by_current_user_but_still_rw.any?
117
+ Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
118
+ "user, but are still readable/writable. These files are:\n - #{files_not_owned_by_current_user_but_still_rw.join("\n - ")}"
119
+
120
+ ok = false
121
+ end
122
+
123
+ if files_not_rw_and_owned_by_different_user.any?
124
+ Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
125
+ "user, and are not readable/writable. These files are:\n - #{files_not_rw_and_owned_by_different_user.join("\n - ")}"
126
+
127
+ ok = false
128
+ end
129
+
130
+ if files_not_readable_or_writable.any?
131
+ Bundler.ui.warn "Files exist in the Bundler home that are not " \
132
+ "readable/writable by the current user. These files are:\n - #{files_not_readable_or_writable.join("\n - ")}"
133
+
134
+ ok = false
135
+ end
136
+
137
+ ok
138
+ end
92
139
  end
93
140
  end
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/current_ruby"
3
4
 
4
5
  module Bundler
5
6
  class CLI::Exec
6
7
  attr_reader :options, :args, :cmd
7
8
 
8
- RESERVED_SIGNALS = %w(SEGV BUS ILL FPE VTALRM KILL STOP).freeze
9
+ TRAPPED_SIGNALS = %w[INT].freeze
9
10
 
10
11
  def initialize(options, args)
11
12
  @options = options
@@ -69,15 +70,14 @@ module Bundler
69
70
  ui = Bundler.ui
70
71
  Bundler.ui = nil
71
72
  require "bundler/setup"
72
- signals = Signal.list.keys - RESERVED_SIGNALS
73
- signals.each {|s| trap(s, "DEFAULT") }
73
+ TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
74
74
  Kernel.load(file)
75
- rescue SystemExit
75
+ rescue SystemExit, SignalException
76
76
  raise
77
77
  rescue Exception => e # rubocop:disable Lint/RescueException
78
78
  Bundler.ui = ui
79
79
  Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
80
- backtrace = e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) }
80
+ backtrace = e.backtrace ? e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) } : []
81
81
  abort "#{e.class}: #{e.message}\n #{backtrace.join("\n ")}"
82
82
  end
83
83
 
@@ -89,6 +89,7 @@ module Bundler
89
89
  possibilities = [
90
90
  "#!/usr/bin/env ruby\n",
91
91
  "#!/usr/bin/env jruby\n",
92
+ "#!/usr/bin/env truffleruby\n",
92
93
  "#!#{Gem.ruby}\n",
93
94
  ]
94
95
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "pathname"
3
4
 
4
5
  module Bundler
@@ -71,10 +72,10 @@ module Bundler
71
72
  "bin/setup.tt" => "bin/setup"
72
73
  }
73
74
 
74
- executables = %w(
75
+ executables = %w[
75
76
  bin/console
76
77
  bin/setup
77
- )
78
+ ]
78
79
 
79
80
  templates.merge!("gitignore.tt" => ".gitignore") if Bundler.git_present?
80
81
 
@@ -82,7 +83,7 @@ module Bundler
82
83
  config[:test] = test_framework
83
84
  config[:test_framework_version] = TEST_FRAMEWORK_VERSIONS[test_framework]
84
85
 
85
- templates.merge!(".travis.yml.tt" => ".travis.yml")
86
+ templates.merge!("travis.yml.tt" => ".travis.yml")
86
87
 
87
88
  case test_framework
88
89
  when "rspec"
@@ -104,7 +105,7 @@ module Bundler
104
105
  if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
105
106
  "This means that any other developer or company will be legally allowed to use your code " \
106
107
  "for free as long as they admit you created it. You can read more about the MIT license " \
107
- "at http://choosealicense.com/licenses/mit.")
108
+ "at https://choosealicense.com/licenses/mit.")
108
109
  config[:mit] = true
109
110
  Bundler.ui.info "MIT License enabled in config"
110
111
  templates.merge!("LICENSE.txt.tt" => "LICENSE.txt")
@@ -117,7 +118,7 @@ module Bundler
117
118
  "of enforcing it, so be sure that you are prepared to do that. Be sure that your email " \
118
119
  "address is specified as a contact in the generated code of conduct so that people know " \
119
120
  "who to contact in case of a violation. For suggestions about " \
120
- "how to enforce codes of conduct, see http://bit.ly/coc-enforcement.")
121
+ "how to enforce codes of conduct, see https://bit.ly/coc-enforcement.")
121
122
  config[:coc] = true
122
123
  Bundler.ui.info "Code of conduct enabled in config"
123
124
  templates.merge!("CODE_OF_CONDUCT.md.tt" => "CODE_OF_CONDUCT.md")
@@ -141,9 +142,10 @@ module Bundler
141
142
  end
142
143
 
143
144
  executables.each do |file|
144
- path = target.join(file)
145
- executable = (path.stat.mode | 0o111)
146
- path.chmod(executable)
145
+ SharedHelpers.filesystem_access(target.join(file)) do |path|
146
+ executable = (path.stat.mode | 0o111)
147
+ path.chmod(executable)
148
+ end
147
149
  end
148
150
 
149
151
  if Bundler.git_present?
@@ -156,6 +158,9 @@ module Bundler
156
158
 
157
159
  # Open gemspec in editor
158
160
  open_editor(options["edit"], target.join("#{name}.gemspec")) if options[:edit]
161
+
162
+ Bundler.ui.info "Gem '#{name}' was successfully created. " \
163
+ "For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html"
159
164
  rescue Errno::EEXIST => e
160
165
  raise GenericSystemCallError.new(e, "There was a conflict while creating the new gem.")
161
166
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "bundler/cli/common"
3
2
 
4
3
  module Bundler
5
4
  class CLI::Info
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Init
4
5
  attr_reader :options
@@ -7,8 +8,13 @@ module Bundler
7
8
  end
8
9
 
9
10
  def run
10
- if File.exist?("Gemfile")
11
- Bundler.ui.error "Gemfile already exists at #{SharedHelpers.pwd}/Gemfile"
11
+ if File.exist?(gemfile)
12
+ Bundler.ui.error "#{gemfile} already exists at #{File.expand_path(gemfile)}"
13
+ exit 1
14
+ end
15
+
16
+ unless File.writable?(Dir.pwd)
17
+ Bundler.ui.error "Can not create #{gemfile} as the current directory is not writable."
12
18
  exit 1
13
19
  end
14
20
 
@@ -21,15 +27,21 @@ module Bundler
21
27
 
22
28
  spec = Bundler.load_gemspec_uncached(gemspec)
23
29
 
24
- puts "Writing new Gemfile to #{SharedHelpers.pwd}/Gemfile"
25
- File.open("Gemfile", "wb") do |file|
30
+ File.open(gemfile, "wb") do |file|
26
31
  file << "# Generated from #{gemspec}\n"
27
32
  file << spec.to_gemfile
28
33
  end
29
34
  else
30
- puts "Writing new Gemfile to #{SharedHelpers.pwd}/Gemfile"
31
- FileUtils.cp(File.expand_path("../../templates/Gemfile", __FILE__), "Gemfile")
35
+ FileUtils.cp(File.expand_path("../../templates/#{gemfile}", __FILE__), gemfile)
32
36
  end
37
+
38
+ puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
39
+ end
40
+
41
+ private
42
+
43
+ def gemfile
44
+ @gemfile ||= Bundler.feature_flag.init_gems_rb? ? "gems.rb" : "Gemfile"
33
45
  end
34
46
  end
35
47
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Inject
4
5
  attr_reader :options, :name, :version, :group, :source, :gems