bundler 2.0.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 (303) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3111 -0
  3. data/LICENSE.md +23 -0
  4. data/README.md +63 -0
  5. data/bundler.gemspec +65 -0
  6. data/exe/bundle +31 -0
  7. data/exe/bundle_ruby +60 -0
  8. data/exe/bundler +4 -0
  9. data/lib/bundler.rb +567 -0
  10. data/lib/bundler/build_metadata.rb +53 -0
  11. data/lib/bundler/capistrano.rb +22 -0
  12. data/lib/bundler/cli.rb +792 -0
  13. data/lib/bundler/cli/add.rb +35 -0
  14. data/lib/bundler/cli/binstubs.rb +49 -0
  15. data/lib/bundler/cli/cache.rb +36 -0
  16. data/lib/bundler/cli/check.rb +38 -0
  17. data/lib/bundler/cli/clean.rb +25 -0
  18. data/lib/bundler/cli/common.rb +102 -0
  19. data/lib/bundler/cli/config.rb +119 -0
  20. data/lib/bundler/cli/console.rb +43 -0
  21. data/lib/bundler/cli/doctor.rb +140 -0
  22. data/lib/bundler/cli/exec.rb +105 -0
  23. data/lib/bundler/cli/gem.rb +252 -0
  24. data/lib/bundler/cli/info.rb +50 -0
  25. data/lib/bundler/cli/init.rb +47 -0
  26. data/lib/bundler/cli/inject.rb +60 -0
  27. data/lib/bundler/cli/install.rb +218 -0
  28. data/lib/bundler/cli/issue.rb +40 -0
  29. data/lib/bundler/cli/list.rb +58 -0
  30. data/lib/bundler/cli/lock.rb +63 -0
  31. data/lib/bundler/cli/open.rb +26 -0
  32. data/lib/bundler/cli/outdated.rb +266 -0
  33. data/lib/bundler/cli/package.rb +49 -0
  34. data/lib/bundler/cli/platform.rb +46 -0
  35. data/lib/bundler/cli/plugin.rb +24 -0
  36. data/lib/bundler/cli/pristine.rb +47 -0
  37. data/lib/bundler/cli/remove.rb +18 -0
  38. data/lib/bundler/cli/show.rb +75 -0
  39. data/lib/bundler/cli/update.rb +91 -0
  40. data/lib/bundler/cli/viz.rb +31 -0
  41. data/lib/bundler/compact_index_client.rb +109 -0
  42. data/lib/bundler/compact_index_client/cache.rb +118 -0
  43. data/lib/bundler/compact_index_client/updater.rb +116 -0
  44. data/lib/bundler/compatibility_guard.rb +13 -0
  45. data/lib/bundler/constants.rb +7 -0
  46. data/lib/bundler/current_ruby.rb +94 -0
  47. data/lib/bundler/definition.rb +995 -0
  48. data/lib/bundler/dep_proxy.rb +48 -0
  49. data/lib/bundler/dependency.rb +139 -0
  50. data/lib/bundler/deployment.rb +69 -0
  51. data/lib/bundler/deprecate.rb +44 -0
  52. data/lib/bundler/dsl.rb +615 -0
  53. data/lib/bundler/endpoint_specification.rb +141 -0
  54. data/lib/bundler/env.rb +149 -0
  55. data/lib/bundler/environment_preserver.rb +59 -0
  56. data/lib/bundler/errors.rb +158 -0
  57. data/lib/bundler/feature_flag.rb +75 -0
  58. data/lib/bundler/fetcher.rb +312 -0
  59. data/lib/bundler/fetcher/base.rb +52 -0
  60. data/lib/bundler/fetcher/compact_index.rb +126 -0
  61. data/lib/bundler/fetcher/dependency.rb +82 -0
  62. data/lib/bundler/fetcher/downloader.rb +84 -0
  63. data/lib/bundler/fetcher/index.rb +52 -0
  64. data/lib/bundler/friendly_errors.rb +131 -0
  65. data/lib/bundler/gem_helper.rb +217 -0
  66. data/lib/bundler/gem_helpers.rb +101 -0
  67. data/lib/bundler/gem_remote_fetcher.rb +43 -0
  68. data/lib/bundler/gem_tasks.rb +7 -0
  69. data/lib/bundler/gem_version_promoter.rb +190 -0
  70. data/lib/bundler/gemdeps.rb +29 -0
  71. data/lib/bundler/graph.rb +152 -0
  72. data/lib/bundler/index.rb +213 -0
  73. data/lib/bundler/injector.rb +253 -0
  74. data/lib/bundler/inline.rb +74 -0
  75. data/lib/bundler/installer.rb +318 -0
  76. data/lib/bundler/installer/gem_installer.rb +85 -0
  77. data/lib/bundler/installer/parallel_installer.rb +229 -0
  78. data/lib/bundler/installer/standalone.rb +53 -0
  79. data/lib/bundler/lazy_specification.rb +123 -0
  80. data/lib/bundler/lockfile_generator.rb +95 -0
  81. data/lib/bundler/lockfile_parser.rb +256 -0
  82. data/lib/bundler/match_platform.rb +24 -0
  83. data/lib/bundler/mirror.rb +223 -0
  84. data/lib/bundler/plugin.rb +294 -0
  85. data/lib/bundler/plugin/api.rb +81 -0
  86. data/lib/bundler/plugin/api/source.rb +306 -0
  87. data/lib/bundler/plugin/dsl.rb +53 -0
  88. data/lib/bundler/plugin/events.rb +61 -0
  89. data/lib/bundler/plugin/index.rb +165 -0
  90. data/lib/bundler/plugin/installer.rb +96 -0
  91. data/lib/bundler/plugin/installer/git.rb +38 -0
  92. data/lib/bundler/plugin/installer/rubygems.rb +27 -0
  93. data/lib/bundler/plugin/source_list.rb +27 -0
  94. data/lib/bundler/process_lock.rb +24 -0
  95. data/lib/bundler/psyched_yaml.rb +37 -0
  96. data/lib/bundler/remote_specification.rb +114 -0
  97. data/lib/bundler/resolver.rb +373 -0
  98. data/lib/bundler/resolver/spec_group.rb +106 -0
  99. data/lib/bundler/retry.rb +66 -0
  100. data/lib/bundler/ruby_dsl.rb +18 -0
  101. data/lib/bundler/ruby_version.rb +152 -0
  102. data/lib/bundler/rubygems_ext.rb +209 -0
  103. data/lib/bundler/rubygems_gem_installer.rb +99 -0
  104. data/lib/bundler/rubygems_integration.rb +915 -0
  105. data/lib/bundler/runtime.rb +322 -0
  106. data/lib/bundler/settings.rb +464 -0
  107. data/lib/bundler/settings/validator.rb +102 -0
  108. data/lib/bundler/setup.rb +28 -0
  109. data/lib/bundler/shared_helpers.rb +386 -0
  110. data/lib/bundler/similarity_detector.rb +63 -0
  111. data/lib/bundler/source.rb +94 -0
  112. data/lib/bundler/source/gemspec.rb +18 -0
  113. data/lib/bundler/source/git.rb +329 -0
  114. data/lib/bundler/source/git/git_proxy.rb +262 -0
  115. data/lib/bundler/source/metadata.rb +62 -0
  116. data/lib/bundler/source/path.rb +249 -0
  117. data/lib/bundler/source/path/installer.rb +74 -0
  118. data/lib/bundler/source/rubygems.rb +539 -0
  119. data/lib/bundler/source/rubygems/remote.rb +69 -0
  120. data/lib/bundler/source_list.rb +186 -0
  121. data/lib/bundler/spec_set.rb +208 -0
  122. data/lib/bundler/ssl_certs/.document +1 -0
  123. data/lib/bundler/ssl_certs/certificate_manager.rb +66 -0
  124. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
  125. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +23 -0
  126. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +25 -0
  127. data/lib/bundler/stub_specification.rb +108 -0
  128. data/lib/bundler/templates/.document +1 -0
  129. data/lib/bundler/templates/Executable +29 -0
  130. data/lib/bundler/templates/Executable.bundler +105 -0
  131. data/lib/bundler/templates/Executable.standalone +14 -0
  132. data/lib/bundler/templates/Gemfile +7 -0
  133. data/lib/bundler/templates/gems.rb +8 -0
  134. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +74 -0
  135. data/lib/bundler/templates/newgem/Gemfile.tt +4 -0
  136. data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  137. data/lib/bundler/templates/newgem/README.md.tt +47 -0
  138. data/lib/bundler/templates/newgem/Rakefile.tt +29 -0
  139. data/lib/bundler/templates/newgem/bin/console.tt +14 -0
  140. data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  141. data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  142. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +3 -0
  143. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  144. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  145. data/lib/bundler/templates/newgem/gitignore.tt +20 -0
  146. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +13 -0
  147. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +7 -0
  148. data/lib/bundler/templates/newgem/newgem.gemspec.tt +50 -0
  149. data/lib/bundler/templates/newgem/rspec.tt +3 -0
  150. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +9 -0
  151. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -0
  152. data/lib/bundler/templates/newgem/test/newgem_test.rb.tt +11 -0
  153. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +8 -0
  154. data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
  155. data/lib/bundler/ui.rb +9 -0
  156. data/lib/bundler/ui/rg_proxy.rb +19 -0
  157. data/lib/bundler/ui/shell.rb +146 -0
  158. data/lib/bundler/ui/silent.rb +69 -0
  159. data/lib/bundler/uri_credentials_filter.rb +37 -0
  160. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1741 -0
  161. data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
  162. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
  163. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  164. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  165. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
  166. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
  167. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  168. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  169. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  170. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  171. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  172. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  173. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  174. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  175. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
  176. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
  177. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  178. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +101 -0
  179. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +67 -0
  180. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
  181. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +46 -0
  182. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
  183. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +27 -0
  184. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1233 -0
  185. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +129 -0
  186. data/lib/bundler/vendor/thor/lib/thor.rb +509 -0
  187. data/lib/bundler/vendor/thor/lib/thor/actions.rb +331 -0
  188. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +104 -0
  189. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +60 -0
  190. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +118 -0
  191. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  192. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  193. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +109 -0
  194. data/lib/bundler/vendor/thor/lib/thor/base.rb +678 -0
  195. data/lib/bundler/vendor/thor/lib/thor/command.rb +135 -0
  196. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +97 -0
  197. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
  198. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
  199. data/lib/bundler/vendor/thor/lib/thor/error.rb +114 -0
  200. data/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  201. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +177 -0
  202. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  203. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  204. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  205. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  206. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +70 -0
  207. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +175 -0
  208. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +146 -0
  209. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +226 -0
  210. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +71 -0
  211. data/lib/bundler/vendor/thor/lib/thor/runner.rb +324 -0
  212. data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  213. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +482 -0
  214. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +149 -0
  215. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +126 -0
  216. data/lib/bundler/vendor/thor/lib/thor/util.rb +268 -0
  217. data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  218. data/lib/bundler/vendored_fileutils.rb +9 -0
  219. data/lib/bundler/vendored_molinillo.rb +4 -0
  220. data/lib/bundler/vendored_persistent.rb +52 -0
  221. data/lib/bundler/vendored_thor.rb +8 -0
  222. data/lib/bundler/version.rb +28 -0
  223. data/lib/bundler/version_ranges.rb +76 -0
  224. data/lib/bundler/vlad.rb +17 -0
  225. data/lib/bundler/worker.rb +106 -0
  226. data/lib/bundler/yaml_serializer.rb +90 -0
  227. data/man/bundle-add.1 +58 -0
  228. data/man/bundle-add.1.txt +52 -0
  229. data/man/bundle-add.ronn +40 -0
  230. data/man/bundle-binstubs.1 +40 -0
  231. data/man/bundle-binstubs.1.txt +48 -0
  232. data/man/bundle-binstubs.ronn +43 -0
  233. data/man/bundle-check.1 +31 -0
  234. data/man/bundle-check.1.txt +33 -0
  235. data/man/bundle-check.ronn +26 -0
  236. data/man/bundle-clean.1 +24 -0
  237. data/man/bundle-clean.1.txt +26 -0
  238. data/man/bundle-clean.ronn +18 -0
  239. data/man/bundle-config.1 +497 -0
  240. data/man/bundle-config.1.txt +529 -0
  241. data/man/bundle-config.ronn +397 -0
  242. data/man/bundle-doctor.1 +44 -0
  243. data/man/bundle-doctor.1.txt +44 -0
  244. data/man/bundle-doctor.ronn +33 -0
  245. data/man/bundle-exec.1 +165 -0
  246. data/man/bundle-exec.1.txt +178 -0
  247. data/man/bundle-exec.ronn +152 -0
  248. data/man/bundle-gem.1 +80 -0
  249. data/man/bundle-gem.1.txt +91 -0
  250. data/man/bundle-gem.ronn +78 -0
  251. data/man/bundle-info.1 +20 -0
  252. data/man/bundle-info.1.txt +21 -0
  253. data/man/bundle-info.ronn +17 -0
  254. data/man/bundle-init.1 +25 -0
  255. data/man/bundle-init.1.txt +34 -0
  256. data/man/bundle-init.ronn +29 -0
  257. data/man/bundle-inject.1 +33 -0
  258. data/man/bundle-inject.1.txt +32 -0
  259. data/man/bundle-inject.ronn +22 -0
  260. data/man/bundle-install.1 +308 -0
  261. data/man/bundle-install.1.txt +396 -0
  262. data/man/bundle-install.ronn +378 -0
  263. data/man/bundle-list.1 +50 -0
  264. data/man/bundle-list.1.txt +43 -0
  265. data/man/bundle-list.ronn +33 -0
  266. data/man/bundle-lock.1 +84 -0
  267. data/man/bundle-lock.1.txt +93 -0
  268. data/man/bundle-lock.ronn +94 -0
  269. data/man/bundle-open.1 +32 -0
  270. data/man/bundle-open.1.txt +29 -0
  271. data/man/bundle-open.ronn +19 -0
  272. data/man/bundle-outdated.1 +155 -0
  273. data/man/bundle-outdated.1.txt +131 -0
  274. data/man/bundle-outdated.ronn +111 -0
  275. data/man/bundle-package.1 +55 -0
  276. data/man/bundle-package.1.txt +79 -0
  277. data/man/bundle-package.ronn +72 -0
  278. data/man/bundle-platform.1 +61 -0
  279. data/man/bundle-platform.1.txt +57 -0
  280. data/man/bundle-platform.ronn +42 -0
  281. data/man/bundle-pristine.1 +34 -0
  282. data/man/bundle-pristine.1.txt +44 -0
  283. data/man/bundle-pristine.ronn +34 -0
  284. data/man/bundle-remove.1 +31 -0
  285. data/man/bundle-remove.1.txt +34 -0
  286. data/man/bundle-remove.ronn +23 -0
  287. data/man/bundle-show.1 +23 -0
  288. data/man/bundle-show.1.txt +27 -0
  289. data/man/bundle-show.ronn +21 -0
  290. data/man/bundle-update.1 +394 -0
  291. data/man/bundle-update.1.txt +391 -0
  292. data/man/bundle-update.ronn +350 -0
  293. data/man/bundle-viz.1 +39 -0
  294. data/man/bundle-viz.1.txt +39 -0
  295. data/man/bundle-viz.ronn +30 -0
  296. data/man/bundle.1 +136 -0
  297. data/man/bundle.1.txt +116 -0
  298. data/man/bundle.ronn +111 -0
  299. data/man/gemfile.5 +689 -0
  300. data/man/gemfile.5.ronn +521 -0
  301. data/man/gemfile.5.txt +653 -0
  302. data/man/index.txt +25 -0
  303. metadata +463 -0
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Add
5
+ def initialize(options, gems)
6
+ @gems = gems
7
+ @options = options
8
+ @options[:group] = @options[:group].split(",").map(&:strip) if !@options[:group].nil? && !@options[:group].empty?
9
+ end
10
+
11
+ def run
12
+ raise InvalidOption, "You can not specify `--strict` and `--optimistic` at the same time." if @options[:strict] && @options[:optimistic]
13
+
14
+ # raise error when no gems are specified
15
+ raise InvalidOption, "Please specify gems to add." if @gems.empty?
16
+
17
+ version = @options[:version].nil? ? nil : @options[:version].split(",").map(&:strip)
18
+
19
+ unless version.nil?
20
+ version.each do |v|
21
+ raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN =~ v.to_s
22
+ end
23
+ end
24
+
25
+ dependencies = @gems.map {|g| Bundler::Dependency.new(g, version, @options) }
26
+
27
+ Injector.inject(dependencies,
28
+ :conservative_versioning => @options[:version].nil?, # Perform conservative versioning only when version is not specified
29
+ :optimistic => @options[:optimistic],
30
+ :strict => @options[:strict])
31
+
32
+ Installer.install(Bundler.root, Bundler.definition) unless @options["skip-install"]
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Binstubs
5
+ attr_reader :options, :gems
6
+ def initialize(options, gems)
7
+ @options = options
8
+ @gems = gems
9
+ end
10
+
11
+ def run
12
+ Bundler.definition.validate_runtime!
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"]
17
+ installer = Installer.new(Bundler.root, Bundler.definition)
18
+
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?
26
+ Bundler.ui.error "`bundle binstubs` needs at least one gem to run."
27
+ exit 1
28
+ end
29
+
30
+ gems.each do |gem_name|
31
+ spec = Bundler.definition.specs.find {|s| s.name == gem_name }
32
+ unless spec
33
+ raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(
34
+ gem_name, Bundler.definition.specs
35
+ )
36
+ end
37
+
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
43
+ else
44
+ installer.generate_bundler_executable_stubs(spec, installer_opts)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Cache
5
+ attr_reader :options
6
+ def initialize(options)
7
+ @options = options
8
+ end
9
+
10
+ def run
11
+ Bundler.definition.validate_runtime!
12
+ Bundler.definition.resolve_with_cache!
13
+ setup_cache_all
14
+ Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
15
+ Bundler.load.cache
16
+ Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
17
+ Bundler.load.lock
18
+ rescue GemNotFound => e
19
+ Bundler.ui.error(e.message)
20
+ Bundler.ui.warn "Run `bundle install` to install missing gems."
21
+ exit 1
22
+ end
23
+
24
+ private
25
+
26
+ def setup_cache_all
27
+ Bundler.settings.set_command_option_if_given :cache_all, options[:all]
28
+
29
+ if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
30
+ Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
31
+ "to package them as well, please pass the --all flag. This will be the default " \
32
+ "on Bundler 2.0."
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Check
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ Bundler.settings.set_command_option_if_given :path, options[:path]
13
+
14
+ begin
15
+ definition = Bundler.definition
16
+ definition.validate_runtime!
17
+ not_installed = definition.missing_specs
18
+ rescue GemNotFound, VersionConflict
19
+ Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."
20
+ Bundler.ui.warn "Install missing gems with `bundle install`."
21
+ exit 1
22
+ end
23
+
24
+ if not_installed.any?
25
+ Bundler.ui.error "The following gems are missing"
26
+ not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
27
+ Bundler.ui.warn "Install missing gems with `bundle install`"
28
+ exit 1
29
+ elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
30
+ Bundler.ui.error "This bundle has been frozen, but there is no #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} present"
31
+ exit 1
32
+ else
33
+ Bundler.load.lock(:preserve_unknown_sections => true) unless options[:"dry-run"]
34
+ Bundler.ui.info "The Gemfile's dependencies are satisfied"
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Clean
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ require_path_or_force unless options[:"dry-run"]
13
+ Bundler.load.clean(options[:"dry-run"])
14
+ end
15
+
16
+ protected
17
+
18
+ def require_path_or_force
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`."
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module CLI::Common
5
+ def self.output_post_install_messages(messages)
6
+ return if Bundler.settings["ignore_messages"]
7
+ messages.to_a.each do |name, msg|
8
+ print_post_install_message(name, msg) unless Bundler.settings["ignore_messages.#{name}"]
9
+ end
10
+ end
11
+
12
+ def self.print_post_install_message(name, msg)
13
+ Bundler.ui.confirm "Post-install message from #{name}:"
14
+ Bundler.ui.info msg
15
+ end
16
+
17
+ def self.output_without_groups_message
18
+ return if Bundler.settings[:without].empty?
19
+ Bundler.ui.confirm without_groups_message
20
+ end
21
+
22
+ def self.without_groups_message
23
+ groups = Bundler.settings[:without]
24
+ group_list = [groups[0...-1].join(", "), groups[-1..-1]].
25
+ reject {|s| s.to_s.empty? }.join(" and ")
26
+ group_str = (groups.size == 1) ? "group" : "groups"
27
+ "Gems in the #{group_str} #{group_list} were not installed."
28
+ end
29
+
30
+ def self.select_spec(name, regex_match = nil)
31
+ specs = []
32
+ regexp = Regexp.new(name) if regex_match
33
+
34
+ Bundler.definition.specs.each do |spec|
35
+ return spec if spec.name == name
36
+ specs << spec if regexp && spec.name =~ regexp
37
+ end
38
+
39
+ case specs.count
40
+ when 0
41
+ raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
42
+ when 1
43
+ specs.first
44
+ else
45
+ ask_for_spec_from(specs)
46
+ end
47
+ rescue RegexpError
48
+ raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
49
+ end
50
+
51
+ def self.ask_for_spec_from(specs)
52
+ if !$stdout.tty? && ENV["BUNDLE_SPEC_RUN"].nil?
53
+ raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
54
+ end
55
+
56
+ specs.each_with_index do |spec, index|
57
+ Bundler.ui.info "#{index.succ} : #{spec.name}", true
58
+ end
59
+ Bundler.ui.info "0 : - exit -", true
60
+
61
+ num = Bundler.ui.ask("> ").to_i
62
+ num > 0 ? specs[num - 1] : nil
63
+ end
64
+
65
+ def self.gem_not_found_message(missing_gem_name, alternatives)
66
+ require "bundler/similarity_detector"
67
+ message = "Could not find gem '#{missing_gem_name}'."
68
+ alternate_names = alternatives.map {|a| a.respond_to?(:name) ? a.name : a }
69
+ suggestions = SimilarityDetector.new(alternate_names).similar_word_list(missing_gem_name)
70
+ message += "\nDid you mean #{suggestions}?" if suggestions
71
+ message
72
+ end
73
+
74
+ def self.ensure_all_gems_in_lockfile!(names, locked_gems = Bundler.locked_gems)
75
+ locked_names = locked_gems.specs.map(&:name).uniq
76
+ names.-(locked_names).each do |g|
77
+ raise GemNotFound, gem_not_found_message(g, locked_names)
78
+ end
79
+ end
80
+
81
+ def self.configure_gem_version_promoter(definition, options)
82
+ patch_level = patch_level_options(options)
83
+ raise InvalidOption, "Provide only one of the following options: #{patch_level.join(", ")}" unless patch_level.length <= 1
84
+ definition.gem_version_promoter.tap do |gvp|
85
+ gvp.level = patch_level.first || :major
86
+ gvp.strict = options[:strict] || options["update-strict"]
87
+ end
88
+ end
89
+
90
+ def self.patch_level_options(options)
91
+ [:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
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
101
+ end
102
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Config
5
+ attr_reader :name, :options, :scope, :thor
6
+ attr_accessor :args
7
+
8
+ def initialize(options, args, thor)
9
+ @options = options
10
+ @args = args
11
+ @thor = thor
12
+ @name = peek = args.shift
13
+ @scope = "global"
14
+ return unless peek && peek.start_with?("--")
15
+ @name = args.shift
16
+ @scope = peek[2..-1]
17
+ end
18
+
19
+ def run
20
+ unless name
21
+ confirm_all
22
+ return
23
+ end
24
+
25
+ unless valid_scope?(scope)
26
+ Bundler.ui.error "Invalid scope --#{scope} given. Please use --local or --global."
27
+ exit 1
28
+ end
29
+
30
+ if scope == "delete"
31
+ Bundler.settings.set_local(name, nil)
32
+ Bundler.settings.set_global(name, nil)
33
+ return
34
+ end
35
+
36
+ if args.empty?
37
+ if options[:parseable]
38
+ if value = Bundler.settings[name]
39
+ Bundler.ui.info("#{name}=#{value}")
40
+ end
41
+ return
42
+ end
43
+
44
+ confirm(name)
45
+ return
46
+ end
47
+
48
+ Bundler.ui.info(message) if message
49
+ Bundler.settings.send("set_#{scope}", name, new_value)
50
+ end
51
+
52
+ private
53
+
54
+ def confirm_all
55
+ if @options[:parseable]
56
+ thor.with_padding do
57
+ Bundler.settings.all.each do |setting|
58
+ val = Bundler.settings[setting]
59
+ Bundler.ui.info "#{setting}=#{val}"
60
+ end
61
+ end
62
+ else
63
+ Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
64
+ Bundler.settings.all.each do |setting|
65
+ Bundler.ui.confirm "#{setting}"
66
+ show_pretty_values_for(setting)
67
+ Bundler.ui.confirm ""
68
+ end
69
+ end
70
+ end
71
+
72
+ def confirm(name)
73
+ Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
74
+ show_pretty_values_for(name)
75
+ end
76
+
77
+ def new_value
78
+ pathname = Pathname.new(args.join(" "))
79
+ if name.start_with?("local.") && pathname.directory?
80
+ pathname.expand_path.to_s
81
+ else
82
+ args.join(" ")
83
+ end
84
+ end
85
+
86
+ def message
87
+ locations = Bundler.settings.locations(name)
88
+ if @options[:parseable]
89
+ "#{name}=#{new_value}" if new_value
90
+ elsif scope == "global"
91
+ if locations[:local]
92
+ "Your application has set #{name} to #{locations[:local].inspect}. " \
93
+ "This will override the global value you are currently setting"
94
+ elsif locations[:env]
95
+ "You have a bundler environment variable for #{name} set to " \
96
+ "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
97
+ elsif locations[:global] && locations[:global] != args.join(" ")
98
+ "You are replacing the current global value of #{name}, which is currently " \
99
+ "#{locations[:global].inspect}"
100
+ end
101
+ elsif scope == "local" && locations[:local] != args.join(" ")
102
+ "You are replacing the current local value of #{name}, which is currently " \
103
+ "#{locations[:local].inspect}"
104
+ end
105
+ end
106
+
107
+ def show_pretty_values_for(setting)
108
+ thor.with_padding do
109
+ Bundler.settings.pretty_values_for(setting).each do |line|
110
+ Bundler.ui.info line
111
+ end
112
+ end
113
+ end
114
+
115
+ def valid_scope?(scope)
116
+ %w[delete local global].include?(scope)
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Console
5
+ attr_reader :options, :group
6
+ def initialize(options, group)
7
+ @options = options
8
+ @group = group
9
+ end
10
+
11
+ def run
12
+ Bundler::SharedHelpers.major_deprecation 3, "bundle console will be replaced " \
13
+ "by `bin/console` generated by `bundle gem <name>`"
14
+
15
+ group ? Bundler.require(:default, *(group.split.map!(&:to_sym))) : Bundler.require
16
+ ARGV.clear
17
+
18
+ console = get_console(Bundler.settings[:console] || "irb")
19
+ console.start
20
+ end
21
+
22
+ def get_console(name)
23
+ require name
24
+ get_constant(name)
25
+ rescue LoadError
26
+ Bundler.ui.error "Couldn't load console #{name}, falling back to irb"
27
+ require "irb"
28
+ get_constant("irb")
29
+ end
30
+
31
+ def get_constant(name)
32
+ const_name = {
33
+ "pry" => :Pry,
34
+ "ripl" => :Ripl,
35
+ "irb" => :IRB,
36
+ }[name]
37
+ Object.const_get(const_name)
38
+ rescue NameError
39
+ Bundler.ui.error "Could not find constant #{const_name}"
40
+ exit 1
41
+ end
42
+ end
43
+ end