bundler 2.3.26 → 2.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +228 -1
  3. data/README.md +3 -6
  4. data/bundler.gemspec +2 -2
  5. data/exe/bundle +1 -4
  6. data/lib/bundler/build_metadata.rb +2 -2
  7. data/lib/bundler/cli/add.rb +1 -1
  8. data/lib/bundler/cli/binstubs.rb +5 -1
  9. data/lib/bundler/cli/check.rb +1 -1
  10. data/lib/bundler/cli/common.rb +1 -0
  11. data/lib/bundler/cli/console.rb +2 -2
  12. data/lib/bundler/cli/doctor.rb +4 -6
  13. data/lib/bundler/cli/gem.rb +62 -40
  14. data/lib/bundler/cli/init.rb +2 -2
  15. data/lib/bundler/cli/install.rb +2 -3
  16. data/lib/bundler/cli/lock.rb +8 -5
  17. data/lib/bundler/cli/open.rb +6 -4
  18. data/lib/bundler/cli/outdated.rb +1 -3
  19. data/lib/bundler/cli/viz.rb +1 -1
  20. data/lib/bundler/cli.rb +45 -2
  21. data/lib/bundler/compact_index_client/cache.rb +1 -1
  22. data/lib/bundler/compact_index_client/updater.rb +40 -39
  23. data/lib/bundler/constants.rb +1 -1
  24. data/lib/bundler/current_ruby.rb +2 -0
  25. data/lib/bundler/definition.rb +99 -51
  26. data/lib/bundler/dependency.rb +13 -12
  27. data/lib/bundler/digest.rb +1 -1
  28. data/lib/bundler/dsl.rb +3 -3
  29. data/lib/bundler/endpoint_specification.rb +0 -4
  30. data/lib/bundler/env.rb +1 -1
  31. data/lib/bundler/environment_preserver.rb +3 -2
  32. data/lib/bundler/errors.rb +1 -11
  33. data/lib/bundler/fetcher/compact_index.rb +9 -11
  34. data/lib/bundler/fetcher/dependency.rb +2 -6
  35. data/lib/bundler/fetcher/downloader.rb +2 -5
  36. data/lib/bundler/fetcher.rb +4 -8
  37. data/lib/bundler/force_platform.rb +18 -0
  38. data/lib/bundler/friendly_errors.rb +0 -3
  39. data/lib/bundler/gem_version_promoter.rb +52 -86
  40. data/lib/bundler/graph.rb +3 -3
  41. data/lib/bundler/index.rb +7 -15
  42. data/lib/bundler/injector.rb +2 -2
  43. data/lib/bundler/inline.rb +8 -10
  44. data/lib/bundler/installer/parallel_installer.rb +3 -33
  45. data/lib/bundler/installer/standalone.rb +12 -8
  46. data/lib/bundler/installer.rb +9 -23
  47. data/lib/bundler/lazy_specification.rb +42 -42
  48. data/lib/bundler/lockfile_generator.rb +1 -1
  49. data/lib/bundler/lockfile_parser.rb +16 -16
  50. data/lib/bundler/man/bundle-add.1 +1 -1
  51. data/lib/bundler/man/bundle-binstubs.1 +1 -1
  52. data/lib/bundler/man/bundle-cache.1 +3 -3
  53. data/lib/bundler/man/bundle-cache.1.ronn +2 -2
  54. data/lib/bundler/man/bundle-check.1 +1 -1
  55. data/lib/bundler/man/bundle-clean.1 +1 -1
  56. data/lib/bundler/man/bundle-config.1 +2 -2
  57. data/lib/bundler/man/bundle-config.1.ronn +1 -1
  58. data/lib/bundler/man/bundle-console.1 +1 -1
  59. data/lib/bundler/man/bundle-doctor.1 +1 -1
  60. data/lib/bundler/man/bundle-exec.1 +5 -5
  61. data/lib/bundler/man/bundle-exec.1.ronn +5 -5
  62. data/lib/bundler/man/bundle-gem.1 +27 -37
  63. data/lib/bundler/man/bundle-gem.1.ronn +5 -5
  64. data/lib/bundler/man/bundle-help.1 +1 -1
  65. data/lib/bundler/man/bundle-info.1 +1 -1
  66. data/lib/bundler/man/bundle-init.1 +5 -1
  67. data/lib/bundler/man/bundle-init.1.ronn +2 -0
  68. data/lib/bundler/man/bundle-inject.1 +1 -1
  69. data/lib/bundler/man/bundle-install.1 +1 -30
  70. data/lib/bundler/man/bundle-install.1.ronn +0 -29
  71. data/lib/bundler/man/bundle-list.1 +1 -1
  72. data/lib/bundler/man/bundle-lock.1 +1 -1
  73. data/lib/bundler/man/bundle-open.1 +22 -2
  74. data/lib/bundler/man/bundle-open.1.ronn +9 -1
  75. data/lib/bundler/man/bundle-outdated.1 +1 -1
  76. data/lib/bundler/man/bundle-platform.1 +2 -2
  77. data/lib/bundler/man/bundle-platform.1.ronn +1 -1
  78. data/lib/bundler/man/bundle-plugin.1 +1 -1
  79. data/lib/bundler/man/bundle-pristine.1 +1 -1
  80. data/lib/bundler/man/bundle-remove.1 +1 -1
  81. data/lib/bundler/man/bundle-show.1 +1 -1
  82. data/lib/bundler/man/bundle-update.1 +1 -1
  83. data/lib/bundler/man/bundle-version.1 +1 -1
  84. data/lib/bundler/man/bundle-viz.1 +1 -1
  85. data/lib/bundler/man/bundle.1 +1 -1
  86. data/lib/bundler/man/gemfile.5 +1 -1
  87. data/lib/bundler/mirror.rb +5 -7
  88. data/lib/bundler/plugin/index.rb +4 -4
  89. data/lib/bundler/plugin/installer/rubygems.rb +0 -4
  90. data/lib/bundler/plugin/installer.rb +5 -2
  91. data/lib/bundler/plugin.rb +1 -1
  92. data/lib/bundler/remote_specification.rb +2 -6
  93. data/lib/bundler/resolver/base.rb +72 -15
  94. data/lib/bundler/resolver/candidate.rb +94 -0
  95. data/lib/bundler/resolver/incompatibility.rb +15 -0
  96. data/lib/bundler/resolver/package.rb +72 -0
  97. data/lib/bundler/resolver/root.rb +25 -0
  98. data/lib/bundler/resolver/spec_group.rb +26 -36
  99. data/lib/bundler/resolver.rb +311 -278
  100. data/lib/bundler/ruby_version.rb +1 -1
  101. data/lib/bundler/rubygems_ext.rb +16 -9
  102. data/lib/bundler/rubygems_gem_installer.rb +4 -2
  103. data/lib/bundler/rubygems_integration.rb +10 -14
  104. data/lib/bundler/runtime.rb +1 -5
  105. data/lib/bundler/safe_marshal.rb +31 -0
  106. data/lib/bundler/settings.rb +1 -7
  107. data/lib/bundler/setup.rb +4 -1
  108. data/lib/bundler/shared_helpers.rb +2 -1
  109. data/lib/bundler/source/git/git_proxy.rb +214 -69
  110. data/lib/bundler/source/git.rb +17 -18
  111. data/lib/bundler/source/metadata.rb +0 -1
  112. data/lib/bundler/source/path/installer.rb +1 -22
  113. data/lib/bundler/source/path.rb +6 -6
  114. data/lib/bundler/source/rubygems.rb +19 -77
  115. data/lib/bundler/source_list.rb +8 -2
  116. data/lib/bundler/spec_set.rb +22 -14
  117. data/lib/bundler/templates/Executable +1 -1
  118. data/lib/bundler/templates/Executable.bundler +5 -10
  119. data/lib/bundler/templates/Executable.standalone +2 -0
  120. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  121. data/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  122. data/lib/bundler/templates/newgem/README.md.tt +6 -4
  123. data/lib/bundler/templates/newgem/Rakefile.tt +12 -1
  124. data/lib/bundler/templates/newgem/bin/console.tt +0 -4
  125. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  126. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  127. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  128. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  129. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  130. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  131. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  132. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  133. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +8 -0
  134. data/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  135. data/lib/bundler/ui/shell.rb +35 -12
  136. data/lib/bundler/ui/silent.rb +21 -5
  137. data/lib/bundler/uri_normalizer.rb +23 -0
  138. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  139. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  140. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  141. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -408
  142. data/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  143. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  144. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  145. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  146. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  147. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  148. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  149. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  150. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  151. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  152. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  153. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  154. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  155. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  156. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  157. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  158. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  159. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  160. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  161. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  162. data/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  163. data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  164. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  165. data/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  166. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  167. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  168. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  169. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  170. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  171. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +13 -7
  172. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +10 -5
  173. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  174. data/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  175. data/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  176. data/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  177. data/lib/bundler/vendored_persistent.rb +1 -33
  178. data/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  179. data/lib/bundler/version.rb +5 -1
  180. data/lib/bundler/worker.rb +5 -7
  181. data/lib/bundler.rb +17 -69
  182. metadata +35 -33
  183. data/lib/bundler/templates/gems.rb +0 -5
  184. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  185. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  186. data/lib/bundler/vendor/molinillo/LICENSE +0 -9
  187. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  188. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  189. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  190. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  191. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  192. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  193. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  194. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  195. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  196. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  197. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  198. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  199. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  200. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  201. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  202. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  203. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  204. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  205. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  206. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  207. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  208. data/lib/bundler/vendored_molinillo.rb +0 -4
  209. data/lib/bundler/version_ranges.rb +0 -122
@@ -52,7 +52,7 @@ module Bundler
52
52
 
53
53
  def gem_path(path, spec)
54
54
  full_path = Pathname.new(path).absolute? ? path : File.join(spec.full_gem_path, path)
55
- if spec.source.instance_of?(Source::Path)
55
+ if spec.source.instance_of?(Source::Path) && spec.source.path.absolute?
56
56
  full_path
57
57
  else
58
58
  Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s
@@ -84,13 +84,17 @@ module Bundler
84
84
 
85
85
  def reverse_rubygems_kernel_mixin
86
86
  <<~END
87
- kernel = (class << ::Kernel; self; end)
88
- [kernel, ::Kernel].each do |k|
89
- if k.private_method_defined?(:gem_original_require)
90
- private_require = k.private_method_defined?(:require)
91
- k.send(:remove_method, :require)
92
- k.send(:define_method, :require, k.instance_method(:gem_original_require))
93
- k.send(:private, :require) if private_require
87
+ if Gem.respond_to?(:discover_gems_on_require=)
88
+ Gem.discover_gems_on_require = false
89
+ else
90
+ kernel = (class << ::Kernel; self; end)
91
+ [kernel, ::Kernel].each do |k|
92
+ if k.private_method_defined?(:gem_original_require)
93
+ private_require = k.private_method_defined?(:require)
94
+ k.send(:remove_method, :require)
95
+ k.send(:define_method, :require, k.instance_method(:gem_original_require))
96
+ k.send(:private, :require) if private_require
97
+ end
94
98
  end
95
99
  end
96
100
  END
@@ -136,11 +136,7 @@ module Bundler
136
136
 
137
137
  mode = Gem.win_platform? ? "wb:UTF-8" : "w"
138
138
  require "erb"
139
- content = if RUBY_VERSION >= "2.6"
140
- ERB.new(template, :trim_mode => "-").result(binding)
141
- else
142
- ERB.new(template, nil, "-").result(binding)
143
- end
139
+ content = ERB.new(template, :trim_mode => "-").result(binding)
144
140
 
145
141
  File.write(binstub_path, content, :mode => mode, :perm => 0o777 & ~File.umask)
146
142
  if Gem.win_platform? || options[:all_platforms]
@@ -183,11 +179,7 @@ module Bundler
183
179
 
184
180
  mode = Gem.win_platform? ? "wb:UTF-8" : "w"
185
181
  require "erb"
186
- content = if RUBY_VERSION >= "2.6"
187
- ERB.new(template, :trim_mode => "-").result(binding)
188
- else
189
- ERB.new(template, nil, "-").result(binding)
190
- end
182
+ content = ERB.new(template, :trim_mode => "-").result(binding)
191
183
 
192
184
  File.write("#{bin_path}/#{executable}", content, :mode => mode, :perm => 0o755)
193
185
  if Gem.win_platform? || options[:all_platforms]
@@ -226,12 +218,10 @@ module Bundler
226
218
 
227
219
  requested_path_gems = @definition.requested_specs.select {|s| s.source.is_a?(Source::Path) }
228
220
  path_plugin_files = requested_path_gems.map do |spec|
229
- begin
230
- Bundler.rubygems.spec_matches_for_glob(spec, "rubygems_plugin#{Bundler.rubygems.suffix_pattern}")
231
- rescue TypeError
232
- error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
233
- raise Gem::InvalidSpecificationException, error_message
234
- end
221
+ Bundler.rubygems.spec_matches_for_glob(spec, "rubygems_plugin#{Bundler.rubygems.suffix_pattern}")
222
+ rescue TypeError
223
+ error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
224
+ raise Gem::InvalidSpecificationException, error_message
235
225
  end.flatten
236
226
  Bundler.rubygems.load_plugin_files(path_plugin_files)
237
227
  Bundler.rubygems.load_env_plugins
@@ -259,17 +249,13 @@ module Bundler
259
249
 
260
250
  # returns whether or not a re-resolve was needed
261
251
  def resolve_if_needed(options)
252
+ @definition.resolution_mode = options
253
+
262
254
  if !@definition.unlocking? && !options["force"] && !Bundler.settings[:inline] && Bundler.default_lockfile.file?
263
255
  return false if @definition.nothing_changed? && !@definition.missing_specs?
264
256
  end
265
257
 
266
- if options["local"]
267
- @definition.resolve_with_cache!
268
- elsif options["prefer-local"]
269
- @definition.resolve_prefering_local!
270
- else
271
- @definition.resolve_remotely!
272
- end
258
+ @definition.setup_sources_for_resolve
273
259
 
274
260
  true
275
261
  end
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "force_platform"
4
+
3
5
  module Bundler
4
6
  class LazySpecification
5
7
  include MatchPlatform
8
+ include ForcePlatform
6
9
 
7
10
  attr_reader :name, :version, :dependencies, :platform
8
11
  attr_accessor :source, :remote, :force_ruby_platform
@@ -13,11 +16,11 @@ module Bundler
13
16
  @dependencies = []
14
17
  @platform = platform || Gem::Platform::RUBY
15
18
  @source = source
16
- @specification = nil
19
+ @force_ruby_platform = default_force_ruby_platform
17
20
  end
18
21
 
19
22
  def full_name
20
- if platform == Gem::Platform::RUBY
23
+ @full_name ||= if platform == Gem::Platform::RUBY
21
24
  "#{@name}-#{@version}"
22
25
  else
23
26
  "#{@name}-#{@version}-#{platform}"
@@ -25,15 +28,15 @@ module Bundler
25
28
  end
26
29
 
27
30
  def ==(other)
28
- identifier == other.identifier
31
+ full_name == other.full_name
29
32
  end
30
33
 
31
34
  def eql?(other)
32
- identifier.eql?(other.identifier)
35
+ full_name.eql?(other.full_name)
33
36
  end
34
37
 
35
38
  def hash
36
- identifier.hash
39
+ full_name.hash
37
40
  end
38
41
 
39
42
  ##
@@ -76,51 +79,56 @@ module Bundler
76
79
  def materialize_for_installation
77
80
  source.local!
78
81
 
79
- candidates = if source.is_a?(Source::Path) || !ruby_platform_materializes_to_ruby_platform?
80
- target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
82
+ matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version])
83
+ return self if matching_specs.empty?
81
84
 
82
- GemHelpers.select_best_platform_match(source.specs.search(Dependency.new(name, version)), target_platform)
85
+ candidates = if use_exact_resolved_specifications?
86
+ matching_specs
83
87
  else
84
- source.specs.search(self)
85
- end
88
+ target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
86
89
 
87
- return self if candidates.empty?
90
+ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
88
91
 
89
- __materialize__(candidates)
90
- end
92
+ specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
93
+ return specification unless specification.nil?
91
94
 
92
- def __materialize__(candidates)
93
- @specification = begin
94
- search = candidates.reverse.find do |spec|
95
- spec.is_a?(StubSpecification) ||
96
- (spec.matches_current_ruby? &&
97
- spec.matches_current_rubygems?)
98
- end
99
- if search.nil? && Bundler.frozen_bundle?
100
- search = candidates.last
101
- else
102
- search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
95
+ if target_platform != platform
96
+ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, platform)
103
97
  end
104
- search
98
+
99
+ installable_candidates
105
100
  end
101
+
102
+ __materialize__(candidates)
106
103
  end
107
104
 
108
- def respond_to?(*args)
109
- super || @specification ? @specification.respond_to?(*args) : nil
105
+ # If in frozen mode, we fallback to a non-installable candidate because by
106
+ # doing this we avoid re-resolving and potentially end up changing the
107
+ # lock file, which is not allowed. In that case, we will give a proper error
108
+ # about the mismatch higher up the stack, right before trying to install the
109
+ # bad gem.
110
+ def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
111
+ search = candidates.reverse.find do |spec|
112
+ spec.is_a?(StubSpecification) ||
113
+ (spec.matches_current_ruby? &&
114
+ spec.matches_current_rubygems?)
115
+ end
116
+ if search.nil? && fallback_to_non_installable
117
+ search = candidates.last
118
+ else
119
+ search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
120
+ end
121
+ search
110
122
  end
111
123
 
112
124
  def to_s
113
- @__to_s ||= if platform == Gem::Platform::RUBY
125
+ @to_s ||= if platform == Gem::Platform::RUBY
114
126
  "#{name} (#{version})"
115
127
  else
116
128
  "#{name} (#{version}-#{platform})"
117
129
  end
118
130
  end
119
131
 
120
- def identifier
121
- @__identifier ||= [name, version, platform.to_s]
122
- end
123
-
124
132
  def git_version
125
133
  return unless source.is_a?(Bundler::Source::Git)
126
134
  " #{source.revision[0..6]}"
@@ -128,16 +136,8 @@ module Bundler
128
136
 
129
137
  private
130
138
 
131
- def to_ary
132
- nil
133
- end
134
-
135
- def method_missing(method, *args, &blk)
136
- raise "LazySpecification has not been materialized yet (calling :#{method} #{args.inspect})" unless @specification
137
-
138
- return super unless respond_to?(method)
139
-
140
- @specification.send(method, *args, &blk)
139
+ def use_exact_resolved_specifications?
140
+ @use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
141
141
  end
142
142
 
143
143
  #
@@ -45,7 +45,7 @@ module Bundler
45
45
  # gems with the same name, but different platform
46
46
  # are ordered consistently
47
47
  specs.sort_by(&:full_name).each do |spec|
48
- next if spec.name == "bundler".freeze
48
+ next if spec.name == "bundler"
49
49
  out << spec.to_lock
50
50
  end
51
51
  end
@@ -4,15 +4,15 @@ module Bundler
4
4
  class LockfileParser
5
5
  attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version, :ruby_version
6
6
 
7
- BUNDLED = "BUNDLED WITH".freeze
8
- DEPENDENCIES = "DEPENDENCIES".freeze
9
- PLATFORMS = "PLATFORMS".freeze
10
- RUBY = "RUBY VERSION".freeze
11
- GIT = "GIT".freeze
12
- GEM = "GEM".freeze
13
- PATH = "PATH".freeze
14
- PLUGIN = "PLUGIN SOURCE".freeze
15
- SPECS = " specs:".freeze
7
+ BUNDLED = "BUNDLED WITH"
8
+ DEPENDENCIES = "DEPENDENCIES"
9
+ PLATFORMS = "PLATFORMS"
10
+ RUBY = "RUBY VERSION"
11
+ GIT = "GIT"
12
+ GEM = "GEM"
13
+ PATH = "PATH"
14
+ PLUGIN = "PLUGIN SOURCE"
15
+ SPECS = " specs:"
16
16
  OPTIONS = /^ ([a-z]+): (.*)$/i.freeze
17
17
  SOURCE = [GIT, GEM, PATH, PLUGIN].freeze
18
18
 
@@ -63,7 +63,7 @@ module Bundler
63
63
  @state = nil
64
64
  @specs = {}
65
65
 
66
- if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
66
+ if lockfile.match?(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
67
67
  raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \
68
68
  "Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock."
69
69
  end
@@ -80,13 +80,13 @@ module Bundler
80
80
  @state = :ruby
81
81
  elsif line == BUNDLED
82
82
  @state = :bundled_with
83
- elsif line =~ /^[^\s]/
83
+ elsif /^[^\s]/.match?(line)
84
84
  @state = nil
85
85
  elsif @state
86
86
  send("parse_#{@state}", line)
87
87
  end
88
88
  end
89
- @specs = @specs.values.sort_by(&:identifier)
89
+ @specs = @specs.values.sort_by(&:full_name)
90
90
  rescue ArgumentError => e
91
91
  Bundler.ui.debug(e)
92
92
  raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
@@ -100,9 +100,9 @@ module Bundler
100
100
  private
101
101
 
102
102
  TYPES = {
103
- GIT => Bundler::Source::Git,
104
- GEM => Bundler::Source::Rubygems,
105
- PATH => Bundler::Source::Path,
103
+ GIT => Bundler::Source::Git,
104
+ GEM => Bundler::Source::Rubygems,
105
+ PATH => Bundler::Source::Path,
106
106
  PLUGIN => Bundler::Plugin,
107
107
  }.freeze
108
108
 
@@ -199,7 +199,7 @@ module Bundler
199
199
  @current_spec.source = @current_source
200
200
  @current_source.add_dependency_names(name)
201
201
 
202
- @specs[@current_spec.identifier] = @current_spec
202
+ @specs[@current_spec.full_name] = @current_spec
203
203
  elsif spaces.size == 6
204
204
  version = version.split(",").map(&:strip) if version
205
205
  dep = Gem::Dependency.new(name, version)
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-ADD" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-ADD" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-BINSTUBS" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-BINSTUBS" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CACHE" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-CACHE" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
@@ -13,7 +13,7 @@
13
13
  alias: \fBpackage\fR, \fBpack\fR
14
14
  .
15
15
  .SH "DESCRIPTION"
16
- Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running [bundle install(1)][bundle\-install], use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
16
+ Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR, use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
17
17
  .
18
18
  .SH "GIT AND PATH GEMS"
19
19
  The \fBbundle cache\fR command can also package \fB:git\fR and \fB:path\fR dependencies besides \.gem files\. This needs to be explicitly enabled via the \fB\-\-all\fR option\. Once used, the \fB\-\-all\fR option will be remembered\.
@@ -22,7 +22,7 @@ The \fBbundle cache\fR command can also package \fB:git\fR and \fB:path\fR depen
22
22
  When using gems that have different packages for different platforms, Bundler supports caching of gems for other platforms where the Gemfile has been resolved (i\.e\. present in the lockfile) in \fBvendor/cache\fR\. This needs to be enabled via the \fB\-\-all\-platforms\fR option\. This setting will be remembered in your local bundler configuration\.
23
23
  .
24
24
  .SH "REMOTE FETCHING"
25
- By default, if you run \fBbundle install(1)\fR](bundle\-install\.1\.html) after running bundle cache(1) \fIbundle\-cache\.1\.html\fR, bundler will still connect to \fBrubygems\.org\fR to check whether a platform\-specific gem exists for any of the gems in \fBvendor/cache\fR\.
25
+ By default, if you run \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR after running bundle cache(1) \fIbundle\-cache\.1\.html\fR, bundler will still connect to \fBrubygems\.org\fR to check whether a platform\-specific gem exists for any of the gems in \fBvendor/cache\fR\.
26
26
  .
27
27
  .P
28
28
  For instance, consider this Gemfile(5):
@@ -10,7 +10,7 @@ alias: `package`, `pack`
10
10
  ## DESCRIPTION
11
11
 
12
12
  Copy all of the `.gem` files needed to run the application into the
13
- `vendor/cache` directory. In the future, when running [bundle install(1)][bundle-install],
13
+ `vendor/cache` directory. In the future, when running [`bundle install(1)`](bundle-install.1.html),
14
14
  use the gems in the cache in preference to the ones on `rubygems.org`.
15
15
 
16
16
  ## GIT AND PATH GEMS
@@ -29,7 +29,7 @@ bundler configuration.
29
29
 
30
30
  ## REMOTE FETCHING
31
31
 
32
- By default, if you run `bundle install(1)`](bundle-install.1.html) after running
32
+ By default, if you run [`bundle install(1)`](bundle-install.1.html) after running
33
33
  [bundle cache(1)](bundle-cache.1.html), bundler will still connect to `rubygems.org`
34
34
  to check whether a platform-specific gem exists for any of the gems
35
35
  in `vendor/cache`.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CHECK" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-CHECK" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CLEAN" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-CLEAN" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CONFIG" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-CONFIG" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-config\fR \- Set bundler configuration options
@@ -39,7 +39,7 @@ Bundler default config
39
39
  .IP "" 0
40
40
  .
41
41
  .P
42
- Executing \fBbundle config list\fR with will print a list of all bundler configuration for the current bundle, and where that configuration was set\.
42
+ Executing \fBbundle config list\fR will print a list of all bundler configuration for the current bundle, and where that configuration was set\.
43
43
  .
44
44
  .P
45
45
  Executing \fBbundle config get <name>\fR will print the value of that configuration setting, and where it was set\.
@@ -19,7 +19,7 @@ Bundler loads configuration settings in this order:
19
19
  3. Global config (`~/.bundle/config`)
20
20
  4. Bundler default config
21
21
 
22
- Executing `bundle config list` with will print a list of all bundler
22
+ Executing `bundle config list` will print a list of all bundler
23
23
  configuration for the current bundle, and where that configuration
24
24
  was set.
25
25
 
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-CONSOLE" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-CONSOLE" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-console\fR \- Deprecated way to open an IRB session with the bundle pre\-loaded
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-DOCTOR" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-DOCTOR" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-doctor\fR \- Checks the bundle for common problems
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-EXEC" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-EXEC" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-exec\fR \- Execute a command in the context of the bundle
@@ -74,13 +74,13 @@ Finally, \fBbundle exec\fR also implicitly modifies \fBGemfile\.lock\fR if the l
74
74
  By default, when attempting to \fBbundle exec\fR to a file with a ruby shebang, Bundler will \fBKernel\.load\fR that file instead of using \fBKernel\.exec\fR\. For the vast majority of cases, this is a performance improvement\. In a rare few cases, this could cause some subtle side\-effects (such as dependence on the exact contents of \fB$0\fR or \fB__FILE__\fR) and the optimization can be disabled by enabling the \fBdisable_exec_load\fR setting\.
75
75
  .
76
76
  .SS "Shelling out"
77
- Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \fBwith_clean_env\fR method with a block\. Any subshells created inside the block will be given the environment present before Bundler was activated\. For example, Homebrew commands run Ruby, but don\'t work inside a bundle:
77
+ Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \fBwith_unbundled_env\fR method with a block\. Any subshells created inside the block will be given the environment present before Bundler was activated\. For example, Homebrew commands run Ruby, but don\'t work inside a bundle:
78
78
  .
79
79
  .IP "" 4
80
80
  .
81
81
  .nf
82
82
 
83
- Bundler\.with_clean_env do
83
+ Bundler\.with_unbundled_env do
84
84
  `brew install wget`
85
85
  end
86
86
  .
@@ -89,13 +89,13 @@ end
89
89
  .IP "" 0
90
90
  .
91
91
  .P
92
- Using \fBwith_clean_env\fR is also necessary if you are shelling out to a different bundle\. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use \fBwith_clean_env\fR\.
92
+ Using \fBwith_unbundled_env\fR is also necessary if you are shelling out to a different bundle\. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use \fBwith_unbundled_env\fR\.
93
93
  .
94
94
  .IP "" 4
95
95
  .
96
96
  .nf
97
97
 
98
- Bundler\.with_clean_env do
98
+ Bundler\.with_unbundled_env do
99
99
  Dir\.chdir "/other/bundler/project" do
100
100
  `bundle exec \./script`
101
101
  end
@@ -84,20 +84,20 @@ the `disable_exec_load` setting.
84
84
  Any Ruby code that opens a subshell (like `system`, backticks, or `%x{}`) will
85
85
  automatically use the current Bundler environment. If you need to shell out to
86
86
  a Ruby command that is not part of your current bundle, use the
87
- `with_clean_env` method with a block. Any subshells created inside the block
87
+ `with_unbundled_env` method with a block. Any subshells created inside the block
88
88
  will be given the environment present before Bundler was activated. For
89
89
  example, Homebrew commands run Ruby, but don't work inside a bundle:
90
90
 
91
- Bundler.with_clean_env do
91
+ Bundler.with_unbundled_env do
92
92
  `brew install wget`
93
93
  end
94
94
 
95
- Using `with_clean_env` is also necessary if you are shelling out to a different
95
+ Using `with_unbundled_env` is also necessary if you are shelling out to a different
96
96
  bundle. Any Bundler commands run in a subshell will inherit the current
97
97
  Gemfile, so commands that need to run in the context of a different bundle also
98
- need to use `with_clean_env`.
98
+ need to use `with_unbundled_env`.
99
99
 
100
- Bundler.with_clean_env do
100
+ Bundler.with_unbundled_env do
101
101
  Dir.chdir "/other/bundler/project" do
102
102
  `bundle exec ./script`
103
103
  end
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-GEM" "1" "October 2022" "" ""
4
+ .TH "BUNDLE\-GEM" "1" "February 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
@@ -31,41 +31,32 @@ The generated project skeleton can be customized with OPTIONS, as explained belo
31
31
  .
32
32
  .SH "OPTIONS"
33
33
  .
34
- .TP
35
- \fB\-\-exe\fR or \fB\-b\fR or \fB\-\-bin\fR
36
- Specify that Bundler should create a binary executable (as \fBexe/GEM_NAME\fR) in the generated rubygem project\. This binary will also be added to the \fBGEM_NAME\.gemspec\fR manifest\. This behavior is disabled by default\.
34
+ .IP "\(bu" 4
35
+ \fB\-\-exe\fR or \fB\-b\fR or \fB\-\-bin\fR: Specify that Bundler should create a binary executable (as \fBexe/GEM_NAME\fR) in the generated rubygem project\. This binary will also be added to the \fBGEM_NAME\.gemspec\fR manifest\. This behavior is disabled by default\.
37
36
  .
38
- .TP
39
- \fB\-\-no\-exe\fR
40
- Do not create a binary (overrides \fB\-\-exe\fR specified in the global config)\.
37
+ .IP "\(bu" 4
38
+ \fB\-\-no\-exe\fR: Do not create a binary (overrides \fB\-\-exe\fR specified in the global config)\.
41
39
  .
42
- .TP
43
- \fB\-\-coc\fR
44
- Add a \fBCODE_OF_CONDUCT\.md\fR file to the root of the generated project\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
40
+ .IP "\(bu" 4
41
+ \fB\-\-coc\fR: Add a \fBCODE_OF_CONDUCT\.md\fR file to the root of the generated project\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
45
42
  .
46
- .TP
47
- \fB\-\-no\-coc\fR
48
- Do not create a \fBCODE_OF_CONDUCT\.md\fR (overrides \fB\-\-coc\fR specified in the global config)\.
43
+ .IP "\(bu" 4
44
+ \fB\-\-no\-coc\fR: Do not create a \fBCODE_OF_CONDUCT\.md\fR (overrides \fB\-\-coc\fR specified in the global config)\.
49
45
  .
50
- .TP
51
- \fB\-\-ext\fR
52
- Add boilerplate for C extension code to the generated project\. This behavior is disabled by default\.
46
+ .IP "\(bu" 4
47
+ \fB\-\-ext=c\fR, \fB\-\-ext=rust\fR Add boilerplate for C or Rust (currently magnus \fIhttps://docs\.rs/magnus\fR based) extension code to the generated project\. This behavior is disabled by default\.
53
48
  .
54
- .TP
55
- \fB\-\-no\-ext\fR
56
- Do not add C extension code (overrides \fB\-\-ext\fR specified in the global config)\.
49
+ .IP "\(bu" 4
50
+ \fB\-\-no\-ext\fR: Do not add extension code (overrides \fB\-\-ext\fR specified in the global config)\.
57
51
  .
58
- .TP
59
- \fB\-\-mit\fR
60
- Add an MIT license to a \fBLICENSE\.txt\fR file in the root of the generated project\. Your name from the global git config is used for the copyright statement\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
52
+ .IP "\(bu" 4
53
+ \fB\-\-mit\fR: Add an MIT license to a \fBLICENSE\.txt\fR file in the root of the generated project\. Your name from the global git config is used for the copyright statement\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
61
54
  .
62
- .TP
63
- \fB\-\-no\-mit\fR
64
- Do not create a \fBLICENSE\.txt\fR (overrides \fB\-\-mit\fR specified in the global config)\.
55
+ .IP "\(bu" 4
56
+ \fB\-\-no\-mit\fR: Do not create a \fBLICENSE\.txt\fR (overrides \fB\-\-mit\fR specified in the global config)\.
65
57
  .
66
- .TP
67
- \fB\-t\fR, \fB\-\-test=minitest\fR, \fB\-\-test=rspec\fR, \fB\-\-test=test\-unit\fR
68
- Specify the test framework that Bundler should use when generating the project\. Acceptable values are \fBminitest\fR, \fBrspec\fR and \fBtest\-unit\fR\. The \fBGEM_NAME\.gemspec\fR will be configured and a skeleton test/spec directory will be created based on this option\. Given no option is specified:
58
+ .IP "\(bu" 4
59
+ \fB\-t\fR, \fB\-\-test=minitest\fR, \fB\-\-test=rspec\fR, \fB\-\-test=test\-unit\fR: Specify the test framework that Bundler should use when generating the project\. Acceptable values are \fBminitest\fR, \fBrspec\fR and \fBtest\-unit\fR\. The \fBGEM_NAME\.gemspec\fR will be configured and a skeleton test/spec directory will be created based on this option\. Given no option is specified:
69
60
  .
70
61
  .IP
71
62
  When Bundler is configured to generate tests, this defaults to Bundler\'s global config setting \fBgem\.test\fR\.
@@ -76,9 +67,8 @@ When Bundler is configured to not generate tests, an interactive prompt will be
76
67
  .IP
77
68
  When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
78
69
  .
79
- .TP
80
- \fB\-\-ci\fR, \fB\-\-ci=github\fR, \fB\-\-ci=travis\fR, \fB\-\-ci=gitlab\fR, \fB\-\-ci=circle\fR
81
- Specify the continuous integration service that Bundler should use when generating the project\. Acceptable values are \fBgithub\fR, \fBtravis\fR, \fBgitlab\fR and \fBcircle\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
70
+ .IP "\(bu" 4
71
+ \fB\-\-ci\fR, \fB\-\-ci=github\fR, \fB\-\-ci=gitlab\fR, \fB\-\-ci=circle\fR: Specify the continuous integration service that Bundler should use when generating the project\. Acceptable values are \fBgithub\fR, \fBgitlab\fR and \fBcircle\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
82
72
  .
83
73
  .IP
84
74
  When Bundler is configured to generate CI files, this defaults to Bundler\'s global config setting \fBgem\.ci\fR\.
@@ -89,9 +79,8 @@ When Bundler is configured to not generate CI files, an interactive prompt will
89
79
  .IP
90
80
  When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
91
81
  .
92
- .TP
93
- \fB\-\-linter\fR, \fB\-\-linter=rubocop\fR, \fB\-\-linter=standard\fR
94
- Specify the linter and code formatter that Bundler should add to the project\'s development dependencies\. Acceptable values are \fBrubocop\fR and \fBstandard\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
82
+ .IP "\(bu" 4
83
+ \fB\-\-linter\fR, \fB\-\-linter=rubocop\fR, \fB\-\-linter=standard\fR: Specify the linter and code formatter that Bundler should add to the project\'s development dependencies\. Acceptable values are \fBrubocop\fR and \fBstandard\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
95
84
  .
96
85
  .IP
97
86
  When Bundler is configured to add a linter, this defaults to Bundler\'s global config setting \fBgem\.linter\fR\.
@@ -102,9 +91,10 @@ When Bundler is configured not to add a linter, an interactive prompt will be di
102
91
  .IP
103
92
  When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
104
93
  .
105
- .TP
106
- \fB\-e\fR, \fB\-\-edit[=EDITOR]\fR
107
- Open the resulting GEM_NAME\.gemspec in EDITOR, or the default editor if not specified\. The default is \fB$BUNDLER_EDITOR\fR, \fB$VISUAL\fR, or \fB$EDITOR\fR\.
94
+ .IP "\(bu" 4
95
+ \fB\-e\fR, \fB\-\-edit[=EDITOR]\fR: Open the resulting GEM_NAME\.gemspec in EDITOR, or the default editor if not specified\. The default is \fB$BUNDLER_EDITOR\fR, \fB$VISUAL\fR, or \fB$EDITOR\fR\.
96
+ .
97
+ .IP "" 0
108
98
  .
109
99
  .SH "SEE ALSO"
110
100
  .