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,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Lock
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ unless Bundler.default_gemfile
13
+ Bundler.ui.error "Unable to find a Gemfile to lock"
14
+ exit 1
15
+ end
16
+
17
+ print = options[:print]
18
+ ui = Bundler.ui
19
+ Bundler.ui = UI::Silent.new if print
20
+
21
+ Bundler::Fetcher.disable_endpoint = options["full-index"]
22
+
23
+ update = options[:update]
24
+ if update.is_a?(Array) # unlocking specific gems
25
+ Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update)
26
+ update = { :gems => update, :lock_shared_dependencies => options[:conservative] }
27
+ end
28
+ definition = Bundler.definition(update)
29
+
30
+ Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options) if options[:update]
31
+
32
+ options["remove-platform"].each do |platform|
33
+ definition.remove_platform(platform)
34
+ end
35
+
36
+ options["add-platform"].each do |platform_string|
37
+ platform = Gem::Platform.new(platform_string)
38
+ if platform.to_s == "unknown"
39
+ Bundler.ui.warn "The platform `#{platform_string}` is unknown to RubyGems " \
40
+ "and adding it will likely lead to resolution errors"
41
+ end
42
+ definition.add_platform(platform)
43
+ end
44
+
45
+ if definition.platforms.empty?
46
+ raise InvalidOption, "Removing all platforms from the bundle is not allowed"
47
+ end
48
+
49
+ definition.resolve_remotely! unless options[:local]
50
+
51
+ if print
52
+ puts definition.to_lock
53
+ else
54
+ file = options[:lockfile]
55
+ file = file ? File.expand_path(file) : Bundler.default_lockfile
56
+ puts "Writing lockfile to #{file}"
57
+ definition.lock(file)
58
+ end
59
+
60
+ Bundler.ui = ui
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "shellwords"
4
+
5
+ module Bundler
6
+ class CLI::Open
7
+ attr_reader :options, :name
8
+ def initialize(options, name)
9
+ @options = options
10
+ @name = name
11
+ end
12
+
13
+ def run
14
+ editor = [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }
15
+ return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor
16
+ return unless spec = Bundler::CLI::Common.select_spec(name, :regex_match)
17
+ path = spec.full_gem_path
18
+ Dir.chdir(path) do
19
+ command = Shellwords.split(editor) + [path]
20
+ Bundler.with_original_env do
21
+ system(*command)
22
+ end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,266 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Outdated
5
+ attr_reader :options, :gems
6
+
7
+ def initialize(options, gems)
8
+ @options = options
9
+ @gems = gems
10
+ end
11
+
12
+ def run
13
+ check_for_deployment_mode
14
+
15
+ sources = Array(options[:source])
16
+
17
+ gems.each do |gem_name|
18
+ Bundler::CLI::Common.select_spec(gem_name)
19
+ end
20
+
21
+ Bundler.definition.validate_runtime!
22
+ current_specs = Bundler.ui.silence { Bundler.definition.resolve }
23
+ current_dependencies = {}
24
+ Bundler.ui.silence do
25
+ Bundler.load.dependencies.each do |dep|
26
+ current_dependencies[dep.name] = dep
27
+ end
28
+ end
29
+
30
+ definition = if gems.empty? && sources.empty?
31
+ # We're doing a full update
32
+ Bundler.definition(true)
33
+ else
34
+ Bundler.definition(:gems => gems, :sources => sources)
35
+ end
36
+
37
+ Bundler::CLI::Common.configure_gem_version_promoter(
38
+ Bundler.definition,
39
+ options
40
+ )
41
+
42
+ # the patch level options imply strict is also true. It wouldn't make
43
+ # sense otherwise.
44
+ strict = options[:strict] ||
45
+ Bundler::CLI::Common.patch_level_options(options).any?
46
+
47
+ filter_options_patch = options.keys &
48
+ %w[filter-major filter-minor filter-patch]
49
+
50
+ definition_resolution = proc do
51
+ options[:local] ? definition.resolve_with_cache! : definition.resolve_remotely!
52
+ end
53
+
54
+ if options[:parseable]
55
+ Bundler.ui.silence(&definition_resolution)
56
+ else
57
+ definition_resolution.call
58
+ end
59
+
60
+ Bundler.ui.info ""
61
+ outdated_gems_by_groups = {}
62
+ outdated_gems_list = []
63
+
64
+ # Loop through the current specs
65
+ gemfile_specs, dependency_specs = current_specs.partition do |spec|
66
+ current_dependencies.key? spec.name
67
+ end
68
+
69
+ specs = if options["only-explicit"]
70
+ gemfile_specs
71
+ else
72
+ gemfile_specs + dependency_specs
73
+ end
74
+
75
+ specs.sort_by(&:name).each do |current_spec|
76
+ next if !gems.empty? && !gems.include?(current_spec.name)
77
+
78
+ dependency = current_dependencies[current_spec.name]
79
+ active_spec = retrieve_active_spec(strict, definition, current_spec)
80
+
81
+ next if active_spec.nil?
82
+ if filter_options_patch.any?
83
+ update_present = update_present_via_semver_portions(current_spec, active_spec, options)
84
+ next unless update_present
85
+ end
86
+
87
+ gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version)
88
+ next unless gem_outdated || (current_spec.git_version != active_spec.git_version)
89
+ groups = nil
90
+ if dependency && !options[:parseable]
91
+ groups = dependency.groups.join(", ")
92
+ end
93
+
94
+ outdated_gems_list << { :active_spec => active_spec,
95
+ :current_spec => current_spec,
96
+ :dependency => dependency,
97
+ :groups => groups }
98
+
99
+ outdated_gems_by_groups[groups] ||= []
100
+ outdated_gems_by_groups[groups] << { :active_spec => active_spec,
101
+ :current_spec => current_spec,
102
+ :dependency => dependency,
103
+ :groups => groups }
104
+ end
105
+
106
+ if outdated_gems_list.empty?
107
+ display_nothing_outdated_message(filter_options_patch)
108
+ else
109
+ unless options[:parseable]
110
+ if options[:pre]
111
+ Bundler.ui.info "Outdated gems included in the bundle (including " \
112
+ "pre-releases):"
113
+ else
114
+ Bundler.ui.info "Outdated gems included in the bundle:"
115
+ end
116
+ end
117
+
118
+ options_include_groups = [:group, :groups].select do |v|
119
+ options.keys.include?(v.to_s)
120
+ end
121
+
122
+ if options_include_groups.any?
123
+ ordered_groups = outdated_gems_by_groups.keys.compact.sort
124
+ [nil, ordered_groups].flatten.each do |groups|
125
+ gems = outdated_gems_by_groups[groups]
126
+ contains_group = if groups
127
+ groups.split(",").include?(options[:group])
128
+ else
129
+ options[:group] == "group"
130
+ end
131
+
132
+ next if (!options[:groups] && !contains_group) || gems.nil?
133
+
134
+ unless options[:parseable]
135
+ if groups
136
+ Bundler.ui.info "===== Group #{groups} ====="
137
+ else
138
+ Bundler.ui.info "===== Without group ====="
139
+ end
140
+ end
141
+
142
+ gems.each do |gem|
143
+ print_gem(
144
+ gem[:current_spec],
145
+ gem[:active_spec],
146
+ gem[:dependency],
147
+ groups,
148
+ options_include_groups.any?
149
+ )
150
+ end
151
+ end
152
+ else
153
+ outdated_gems_list.each do |gem|
154
+ print_gem(
155
+ gem[:current_spec],
156
+ gem[:active_spec],
157
+ gem[:dependency],
158
+ gem[:groups],
159
+ options_include_groups.any?
160
+ )
161
+ end
162
+ end
163
+
164
+ exit 1
165
+ end
166
+ end
167
+
168
+ private
169
+
170
+ def retrieve_active_spec(strict, definition, current_spec)
171
+ if strict
172
+ active_spec = definition.find_resolved_spec(current_spec)
173
+ else
174
+ active_specs = definition.find_indexed_specs(current_spec)
175
+ if !current_spec.version.prerelease? && !options[:pre] && active_specs.size > 1
176
+ active_specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
177
+ end
178
+ active_spec = active_specs.last
179
+ end
180
+
181
+ active_spec
182
+ end
183
+
184
+ def display_nothing_outdated_message(filter_options_patch)
185
+ unless options[:parseable]
186
+ if filter_options_patch.any?
187
+ display = filter_options_patch.map do |o|
188
+ o.sub("filter-", "")
189
+ end.join(" or ")
190
+
191
+ Bundler.ui.info "No #{display} updates to display.\n"
192
+ else
193
+ Bundler.ui.info "Bundle up to date!\n"
194
+ end
195
+ end
196
+ end
197
+
198
+ def print_gem(current_spec, active_spec, dependency, groups, options_include_groups)
199
+ spec_version = "#{active_spec.version}#{active_spec.git_version}"
200
+ spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
201
+ current_version = "#{current_spec.version}#{current_spec.git_version}"
202
+
203
+ if dependency && dependency.specific?
204
+ dependency_version = %(, requested #{dependency.requirement})
205
+ end
206
+
207
+ spec_outdated_info = "#{active_spec.name} (newest #{spec_version}, " \
208
+ "installed #{current_version}#{dependency_version})"
209
+
210
+ output_message = if options[:parseable]
211
+ spec_outdated_info.to_s
212
+ elsif options_include_groups || !groups
213
+ " * #{spec_outdated_info}"
214
+ else
215
+ " * #{spec_outdated_info} in groups \"#{groups}\""
216
+ end
217
+
218
+ Bundler.ui.info output_message.rstrip
219
+ end
220
+
221
+ def check_for_deployment_mode
222
+ return unless Bundler.frozen_bundle?
223
+ suggested_command = if Bundler.settings.locations("frozen")[:global]
224
+ "bundle config --delete frozen"
225
+ elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
226
+ "bundle config --delete deployment"
227
+ else
228
+ "bundle install --no-deployment"
229
+ end
230
+ raise ProductionError, "You are trying to check outdated gems in " \
231
+ "deployment mode. Run `bundle outdated` elsewhere.\n" \
232
+ "\nIf this is a development machine, remove the " \
233
+ "#{Bundler.default_gemfile} freeze" \
234
+ "\nby running `#{suggested_command}`."
235
+ end
236
+
237
+ def update_present_via_semver_portions(current_spec, active_spec, options)
238
+ current_major = current_spec.version.segments.first
239
+ active_major = active_spec.version.segments.first
240
+
241
+ update_present = false
242
+ update_present = active_major > current_major if options["filter-major"]
243
+
244
+ if !update_present && (options["filter-minor"] || options["filter-patch"]) && current_major == active_major
245
+ current_minor = get_version_semver_portion_value(current_spec, 1)
246
+ active_minor = get_version_semver_portion_value(active_spec, 1)
247
+
248
+ update_present = active_minor > current_minor if options["filter-minor"]
249
+
250
+ if !update_present && options["filter-patch"] && current_minor == active_minor
251
+ current_patch = get_version_semver_portion_value(current_spec, 2)
252
+ active_patch = get_version_semver_portion_value(active_spec, 2)
253
+
254
+ update_present = active_patch > current_patch
255
+ end
256
+ end
257
+
258
+ update_present
259
+ end
260
+
261
+ def get_version_semver_portion_value(spec, version_portion_index)
262
+ version_section = spec.version.segments[version_portion_index, 1]
263
+ version_section.nil? ? 0 : (version_section.first || 0)
264
+ end
265
+ end
266
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Package
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ Bundler.ui.level = "error" if options[:quiet]
13
+ Bundler.settings.set_command_option_if_given :path, options[:path]
14
+ Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
15
+ Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
16
+
17
+ setup_cache_all
18
+ install
19
+
20
+ # TODO: move cache contents here now that all bundles are locked
21
+ custom_path = Bundler.settings[:path] if options[:path]
22
+ Bundler.load.cache(custom_path)
23
+ end
24
+
25
+ private
26
+
27
+ def install
28
+ require "bundler/cli/install"
29
+ options = self.options.dup
30
+ if Bundler.settings[:cache_all_platforms]
31
+ options["local"] = false
32
+ options["update"] = true
33
+ end
34
+ Bundler::CLI::Install.new(options).run
35
+ end
36
+
37
+ def setup_cache_all
38
+ all = options.fetch(:all, Bundler.feature_flag.cache_command_is_package? || nil)
39
+
40
+ Bundler.settings.set_command_option_if_given :cache_all, all
41
+
42
+ if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
43
+ Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
44
+ "to package them as well, please pass the --all flag. This will be the default " \
45
+ "on Bundler 2.0."
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Platform
5
+ attr_reader :options
6
+ def initialize(options)
7
+ @options = options
8
+ end
9
+
10
+ def run
11
+ platforms, ruby_version = Bundler.ui.silence do
12
+ locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version
13
+ gemfile_ruby_version = Bundler.definition.ruby_version && Bundler.definition.ruby_version.single_version_string
14
+ [Bundler.definition.platforms.map {|p| "* #{p}" },
15
+ locked_ruby_version || gemfile_ruby_version]
16
+ end
17
+ output = []
18
+
19
+ if options[:ruby]
20
+ if ruby_version
21
+ output << ruby_version
22
+ else
23
+ output << "No ruby version specified"
24
+ end
25
+ else
26
+ output << "Your platform is: #{RUBY_PLATFORM}"
27
+ output << "Your app has gems that work on these platforms:\n#{platforms.join("\n")}"
28
+
29
+ if ruby_version
30
+ output << "Your Gemfile specifies a Ruby version requirement:\n* #{ruby_version}"
31
+
32
+ begin
33
+ Bundler.definition.validate_runtime!
34
+ output << "Your current platform satisfies the Ruby version requirement."
35
+ rescue RubyVersionMismatch => e
36
+ output << e.message
37
+ end
38
+ else
39
+ output << "Your Gemfile does not specify a Ruby version requirement."
40
+ end
41
+ end
42
+
43
+ Bundler.ui.info output.join("\n\n")
44
+ end
45
+ end
46
+ end