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,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Info
5
+ attr_reader :gem_name, :options
6
+ def initialize(options, gem_name)
7
+ @options = options
8
+ @gem_name = gem_name
9
+ end
10
+
11
+ def run
12
+ spec = spec_for_gem(gem_name)
13
+
14
+ spec_not_found(gem_name) unless spec
15
+ return print_gem_path(spec) if @options[:path]
16
+ print_gem_info(spec)
17
+ end
18
+
19
+ private
20
+
21
+ def spec_for_gem(gem_name)
22
+ spec = Bundler.definition.specs.find {|s| s.name == gem_name }
23
+ spec || default_gem_spec(gem_name)
24
+ end
25
+
26
+ def default_gem_spec(gem_name)
27
+ return unless Gem::Specification.respond_to?(:find_all_by_name)
28
+ gem_spec = Gem::Specification.find_all_by_name(gem_name).last
29
+ return gem_spec if gem_spec && gem_spec.respond_to?(:default_gem?) && gem_spec.default_gem?
30
+ end
31
+
32
+ def spec_not_found(gem_name)
33
+ raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(gem_name, Bundler.definition.dependencies)
34
+ end
35
+
36
+ def print_gem_path(spec)
37
+ Bundler.ui.info spec.full_gem_path
38
+ end
39
+
40
+ def print_gem_info(spec)
41
+ gem_info = String.new
42
+ gem_info << " * #{spec.name} (#{spec.version}#{spec.git_version})\n"
43
+ gem_info << "\tSummary: #{spec.summary}\n" if spec.summary
44
+ gem_info << "\tHomepage: #{spec.homepage}\n" if spec.homepage
45
+ gem_info << "\tPath: #{spec.full_gem_path}\n"
46
+ gem_info << "\tDefault Gem: yes" if spec.respond_to?(:default_gem?) && spec.default_gem?
47
+ Bundler.ui.info gem_info
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Init
5
+ attr_reader :options
6
+ def initialize(options)
7
+ @options = options
8
+ end
9
+
10
+ def run
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."
18
+ exit 1
19
+ end
20
+
21
+ if options[:gemspec]
22
+ gemspec = File.expand_path(options[:gemspec])
23
+ unless File.exist?(gemspec)
24
+ Bundler.ui.error "Gem specification #{gemspec} doesn't exist"
25
+ exit 1
26
+ end
27
+
28
+ spec = Bundler.load_gemspec_uncached(gemspec)
29
+
30
+ File.open(gemfile, "wb") do |file|
31
+ file << "# Generated from #{gemspec}\n"
32
+ file << spec.to_gemfile
33
+ end
34
+ else
35
+ FileUtils.cp(File.expand_path("../../templates/#{gemfile}", __FILE__), gemfile)
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"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Inject
5
+ attr_reader :options, :name, :version, :group, :source, :gems
6
+ def initialize(options, name, version)
7
+ @options = options
8
+ @name = name
9
+ @version = version || last_version_number
10
+ @group = options[:group].split(",") unless options[:group].nil?
11
+ @source = options[:source]
12
+ @gems = []
13
+ end
14
+
15
+ def run
16
+ # The required arguments allow Thor to give useful feedback when the arguments
17
+ # are incorrect. This adds those first two arguments onto the list as a whole.
18
+ gems.unshift(source).unshift(group).unshift(version).unshift(name)
19
+
20
+ # Build an array of Dependency objects out of the arguments
21
+ deps = []
22
+ # when `inject` support addition of more than one gem, then this loop will
23
+ # help. Currently this loop is running once.
24
+ gems.each_slice(4) do |gem_name, gem_version, gem_group, gem_source|
25
+ ops = Gem::Requirement::OPS.map {|key, _val| key }
26
+ has_op = ops.any? {|op| gem_version.start_with? op }
27
+ gem_version = "~> #{gem_version}" unless has_op
28
+ deps << Bundler::Dependency.new(gem_name, gem_version, "group" => gem_group, "source" => gem_source)
29
+ end
30
+
31
+ added = Injector.inject(deps, options)
32
+
33
+ if added.any?
34
+ Bundler.ui.confirm "Added to Gemfile:"
35
+ Bundler.ui.confirm(added.map do |d|
36
+ name = "'#{d.name}'"
37
+ requirement = ", '#{d.requirement}'"
38
+ group = ", :group => #{d.groups.inspect}" if d.groups != Array(:default)
39
+ source = ", :source => '#{d.source}'" unless d.source.nil?
40
+ %(gem #{name}#{requirement}#{group}#{source})
41
+ end.join("\n"))
42
+ else
43
+ Bundler.ui.confirm "All gems were already present in the Gemfile"
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def last_version_number
50
+ definition = Bundler.definition(true)
51
+ definition.resolve_remotely!
52
+ specs = definition.index[name].sort_by(&:version)
53
+ unless options[:pre]
54
+ specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
55
+ end
56
+ spec = specs.last
57
+ spec.version.to_s
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,218 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Install
5
+ attr_reader :options
6
+ def initialize(options)
7
+ @options = options
8
+ end
9
+
10
+ def run
11
+ Bundler.ui.level = "error" if options[:quiet]
12
+
13
+ warn_if_root
14
+
15
+ normalize_groups
16
+
17
+ Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
18
+
19
+ # Disable color in deployment mode
20
+ Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]
21
+
22
+ check_for_options_conflicts
23
+
24
+ check_trust_policy
25
+
26
+ if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
27
+ unless Bundler.default_lockfile.exist?
28
+ flag = "--deployment flag" if options[:deployment]
29
+ flag ||= "--frozen flag" if options[:frozen]
30
+ flag ||= "deployment setting"
31
+ raise ProductionError, "The #{flag} requires a #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}. Please make " \
32
+ "sure you have checked your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} into version control " \
33
+ "before deploying."
34
+ end
35
+
36
+ options[:local] = true if Bundler.app_cache.exist?
37
+
38
+ if Bundler.feature_flag.deployment_means_frozen?
39
+ Bundler.settings.set_command_option :deployment, true
40
+ else
41
+ Bundler.settings.set_command_option :frozen, true
42
+ end
43
+ end
44
+
45
+ # When install is called with --no-deployment, disable deployment mode
46
+ if options[:deployment] == false
47
+ Bundler.settings.set_command_option :frozen, nil
48
+ options[:system] = true
49
+ end
50
+
51
+ normalize_settings
52
+
53
+ Bundler::Fetcher.disable_endpoint = options["full-index"]
54
+
55
+ if options["binstubs"]
56
+ Bundler::SharedHelpers.major_deprecation 3,
57
+ "The --binstubs option will be removed in favor of `bundle binstubs`"
58
+ end
59
+
60
+ Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
61
+
62
+ definition = Bundler.definition
63
+ definition.validate_runtime!
64
+
65
+ installer = Installer.install(Bundler.root, definition, options)
66
+ Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
67
+
68
+ Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
69
+ Bundler::CLI::Common.output_without_groups_message
70
+
71
+ if Bundler.use_system_gems?
72
+ Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
73
+ else
74
+ relative_path = Bundler.configured_bundle_path.base_path_relative_to_pwd
75
+ Bundler.ui.confirm "Bundled gems are installed into `#{relative_path}`"
76
+ end
77
+
78
+ Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
79
+
80
+ warn_ambiguous_gems
81
+
82
+ if CLI::Common.clean_after_install?
83
+ require "bundler/cli/clean"
84
+ Bundler::CLI::Clean.new(options).run
85
+ end
86
+ rescue GemNotFound, VersionConflict => e
87
+ if options[:local] && Bundler.app_cache.exist?
88
+ Bundler.ui.warn "Some gems seem to be missing from your #{Bundler.settings.app_cache_path} directory."
89
+ end
90
+
91
+ unless Bundler.definition.has_rubygems_remotes?
92
+ Bundler.ui.warn <<-WARN, :wrap => true
93
+ Your Gemfile has no gem server sources. If you need gems that are \
94
+ not already on your machine, add a line like this to your Gemfile:
95
+ source 'https://rubygems.org'
96
+ WARN
97
+ end
98
+ raise e
99
+ rescue Gem::InvalidSpecificationException => e
100
+ Bundler.ui.warn "You have one or more invalid gemspecs that need to be fixed."
101
+ raise e
102
+ end
103
+
104
+ private
105
+
106
+ def warn_if_root
107
+ return if Bundler.settings[:silence_root_warning] || Bundler::WINDOWS || !Process.uid.zero?
108
+ Bundler.ui.warn "Don't run Bundler as root. Bundler can ask for sudo " \
109
+ "if it is needed, and installing your bundle as root will break this " \
110
+ "application for all non-root users on this machine.", :wrap => true
111
+ end
112
+
113
+ def dependencies_count_for(definition)
114
+ count = definition.dependencies.count
115
+ "#{count} Gemfile #{count == 1 ? "dependency" : "dependencies"}"
116
+ end
117
+
118
+ def gems_installed_for(definition)
119
+ count = definition.specs.count
120
+ "#{count} #{count == 1 ? "gem" : "gems"} now installed"
121
+ end
122
+
123
+ def check_for_group_conflicts_in_cli_options
124
+ conflicting_groups = Array(options[:without]) & Array(options[:with])
125
+ return if conflicting_groups.empty?
126
+ raise InvalidOption, "You can't list a group in both with and without." \
127
+ " The offending groups are: #{conflicting_groups.join(", ")}."
128
+ end
129
+
130
+ def check_for_options_conflicts
131
+ if (options[:path] || options[:deployment]) && options[:system]
132
+ error_message = String.new
133
+ error_message << "You have specified both --path as well as --system. Please choose only one option.\n" if options[:path]
134
+ error_message << "You have specified both --deployment as well as --system. Please choose only one option.\n" if options[:deployment]
135
+ raise InvalidOption.new(error_message)
136
+ end
137
+ end
138
+
139
+ def check_trust_policy
140
+ trust_policy = options["trust-policy"]
141
+ unless Bundler.rubygems.security_policies.keys.unshift(nil).include?(trust_policy)
142
+ raise InvalidOption, "RubyGems doesn't know about trust policy '#{trust_policy}'. " \
143
+ "The known policies are: #{Bundler.rubygems.security_policies.keys.join(", ")}."
144
+ end
145
+ Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
146
+ end
147
+
148
+ def normalize_groups
149
+ options[:with] &&= options[:with].join(":").tr(" ", ":").split(":")
150
+ options[:without] &&= options[:without].join(":").tr(" ", ":").split(":")
151
+
152
+ check_for_group_conflicts_in_cli_options
153
+
154
+ Bundler.settings.set_command_option :with, nil if options[:with] == []
155
+ Bundler.settings.set_command_option :without, nil if options[:without] == []
156
+
157
+ with = options.fetch(:with, [])
158
+ with |= Bundler.settings[:with].map(&:to_s)
159
+ with -= options[:without] if options[:without]
160
+
161
+ without = options.fetch(:without, [])
162
+ without |= Bundler.settings[:without].map(&:to_s)
163
+ without -= options[:with] if options[:with]
164
+
165
+ options[:with] = with
166
+ options[:without] = without
167
+ end
168
+
169
+ def normalize_settings
170
+ Bundler.settings.set_command_option :path, nil if options[:system]
171
+ Bundler.settings.temporary(:path_relative_to_cwd => false) do
172
+ Bundler.settings.set_command_option :path, "vendor/bundle" if options[:deployment]
173
+ end
174
+ Bundler.settings.set_command_option_if_given :path, options[:path]
175
+ Bundler.settings.temporary(:path_relative_to_cwd => false) do
176
+ Bundler.settings.set_command_option :path, "bundle" if options["standalone"] && Bundler.settings[:path].nil?
177
+ end
178
+
179
+ bin_option = options["binstubs"]
180
+ bin_option = nil if bin_option && bin_option.empty?
181
+ Bundler.settings.set_command_option :bin, bin_option if options["binstubs"]
182
+
183
+ Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
184
+
185
+ Bundler.settings.set_command_option_if_given :jobs, options["jobs"]
186
+
187
+ Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
188
+
189
+ Bundler.settings.set_command_option_if_given :no_install, options["no-install"]
190
+
191
+ Bundler.settings.set_command_option_if_given :clean, options["clean"]
192
+
193
+ unless Bundler.settings[:without] == options[:without] && Bundler.settings[:with] == options[:with]
194
+ # need to nil them out first to get around validation for backwards compatibility
195
+ Bundler.settings.set_command_option :without, nil
196
+ Bundler.settings.set_command_option :with, nil
197
+ Bundler.settings.set_command_option :without, options[:without] - options[:with]
198
+ Bundler.settings.set_command_option :with, options[:with]
199
+ end
200
+
201
+ options[:force] = options[:redownload]
202
+ end
203
+
204
+ def warn_ambiguous_gems
205
+ # TODO: remove this when we drop Bundler 1.x support
206
+ Installer.ambiguous_gems.to_a.each do |name, installed_from_uri, *also_found_in_uris|
207
+ Bundler.ui.warn "Warning: the gem '#{name}' was found in multiple sources."
208
+ Bundler.ui.warn "Installed from: #{installed_from_uri}"
209
+ Bundler.ui.warn "Also found in:"
210
+ also_found_in_uris.each {|uri| Bundler.ui.warn " * #{uri}" }
211
+ Bundler.ui.warn "You should add a source requirement to restrict this gem to your preferred source."
212
+ Bundler.ui.warn "For example:"
213
+ Bundler.ui.warn " gem '#{name}', :source => '#{installed_from_uri}'"
214
+ Bundler.ui.warn "Then uninstall the gem '#{name}' (or delete all bundled gems) and then install again."
215
+ end
216
+ end
217
+ end
218
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rbconfig"
4
+
5
+ module Bundler
6
+ class CLI::Issue
7
+ def run
8
+ Bundler.ui.info <<-EOS.gsub(/^ {8}/, "")
9
+ Did you find an issue with Bundler? Before filing a new issue,
10
+ be sure to check out these resources:
11
+
12
+ 1. Check out our troubleshooting guide for quick fixes to common issues:
13
+ https://github.com/bundler/bundler/blob/master/doc/TROUBLESHOOTING.md
14
+
15
+ 2. Instructions for common Bundler uses can be found on the documentation
16
+ site: https://bundler.io/
17
+
18
+ 3. Information about each Bundler command can be found in the Bundler
19
+ man pages: https://bundler.io/man/bundle.1.html
20
+
21
+ Hopefully the troubleshooting steps above resolved your problem! If things
22
+ still aren't working the way you expect them to, please let us know so
23
+ that we can diagnose and help fix the problem you're having. Please
24
+ view the Filing Issues guide for more information:
25
+ https://github.com/bundler/bundler/blob/master/doc/contributing/ISSUES.md
26
+
27
+ EOS
28
+
29
+ Bundler.ui.info Bundler::Env.report
30
+
31
+ Bundler.ui.info "\n## Bundle Doctor"
32
+ doctor
33
+ end
34
+
35
+ def doctor
36
+ require "bundler/cli/doctor"
37
+ Bundler::CLI::Doctor.new({}).run
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::List
5
+ def initialize(options)
6
+ @options = options
7
+ end
8
+
9
+ def run
10
+ raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @options["only-group"] && @options["without-group"]
11
+
12
+ raise InvalidOption, "The `--name-only` and `--paths` options cannot be used together" if @options["name-only"] && @options[:paths]
13
+
14
+ specs = if @options["only-group"] || @options["without-group"]
15
+ filtered_specs_by_groups
16
+ else
17
+ Bundler.load.specs
18
+ end.reject {|s| s.name == "bundler" }.sort_by(&:name)
19
+
20
+ return Bundler.ui.info "No gems in the Gemfile" if specs.empty?
21
+
22
+ return specs.each {|s| Bundler.ui.info s.name } if @options["name-only"]
23
+ return specs.each {|s| Bundler.ui.info s.full_gem_path } if @options["paths"]
24
+
25
+ Bundler.ui.info "Gems included by the bundle:"
26
+
27
+ specs.each {|s| Bundler.ui.info " * #{s.name} (#{s.version}#{s.git_version})" }
28
+
29
+ Bundler.ui.info "Use `bundle info` to print more detailed information about a gem"
30
+ end
31
+
32
+ private
33
+
34
+ def verify_group_exists(groups)
35
+ raise InvalidOption, "`#{@options["without-group"]}` group could not be found." if @options["without-group"] && !groups.include?(@options["without-group"].to_sym)
36
+
37
+ raise InvalidOption, "`#{@options["only-group"]}` group could not be found." if @options["only-group"] && !groups.include?(@options["only-group"].to_sym)
38
+ end
39
+
40
+ def filtered_specs_by_groups
41
+ definition = Bundler.definition
42
+ groups = definition.groups
43
+
44
+ verify_group_exists(groups)
45
+
46
+ show_groups =
47
+ if @options["without-group"]
48
+ groups.reject {|g| g == @options["without-group"].to_sym }
49
+ elsif @options["only-group"]
50
+ groups.select {|g| g == @options["only-group"].to_sym }
51
+ else
52
+ groups
53
+ end.map(&:to_sym)
54
+
55
+ definition.specs_for(show_groups)
56
+ end
57
+ end
58
+ end