rubygems-update 3.4.19 → 3.4.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +58 -0
  3. data/Manifest.txt +1 -0
  4. data/bundler/CHANGELOG.md +62 -2
  5. data/bundler/lib/bundler/build_metadata.rb +3 -3
  6. data/bundler/lib/bundler/cli/check.rb +1 -1
  7. data/bundler/lib/bundler/cli/gem.rb +1 -3
  8. data/bundler/lib/bundler/cli/info.rb +1 -1
  9. data/bundler/lib/bundler/cli/install.rb +2 -2
  10. data/bundler/lib/bundler/cli/lock.rb +26 -23
  11. data/bundler/lib/bundler/cli/open.rb +5 -7
  12. data/bundler/lib/bundler/cli/update.rb +1 -0
  13. data/bundler/lib/bundler/definition.rb +42 -25
  14. data/bundler/lib/bundler/env.rb +2 -2
  15. data/bundler/lib/bundler/fetcher/base.rb +2 -2
  16. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -5
  17. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  18. data/bundler/lib/bundler/fetcher.rb +31 -30
  19. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  20. data/bundler/lib/bundler/index.rb +62 -31
  21. data/bundler/lib/bundler/injector.rb +1 -1
  22. data/bundler/lib/bundler/installer/parallel_installer.rb +0 -26
  23. data/bundler/lib/bundler/installer/standalone.rb +15 -1
  24. data/bundler/lib/bundler/lockfile_parser.rb +32 -39
  25. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  29. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-config.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
  34. data/bundler/lib/bundler/man/bundle-exec.1.ronn +2 -3
  35. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-plugin.1 +17 -17
  47. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +5 -5
  48. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  49. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  50. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  51. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  52. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle.1 +1 -1
  55. data/bundler/lib/bundler/man/gemfile.5 +12 -1
  56. data/bundler/lib/bundler/man/gemfile.5.ronn +5 -0
  57. data/bundler/lib/bundler/plugin.rb +1 -1
  58. data/bundler/lib/bundler/resolver/package.rb +5 -0
  59. data/bundler/lib/bundler/resolver.rb +45 -10
  60. data/bundler/lib/bundler/retry.rb +1 -1
  61. data/bundler/lib/bundler/ruby_dsl.rb +23 -2
  62. data/bundler/lib/bundler/ruby_version.rb +8 -1
  63. data/bundler/lib/bundler/self_manager.rb +2 -0
  64. data/bundler/lib/bundler/settings.rb +86 -25
  65. data/bundler/lib/bundler/shared_helpers.rb +16 -1
  66. data/bundler/lib/bundler/source/git/git_proxy.rb +27 -6
  67. data/bundler/lib/bundler/source/rubygems.rb +22 -25
  68. data/bundler/lib/bundler/spec_set.rb +2 -2
  69. data/bundler/lib/bundler/stub_specification.rb +4 -2
  70. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +6 -2
  71. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +1 -1
  72. data/bundler/lib/bundler/version.rb +1 -1
  73. data/bundler/lib/bundler/yaml_serializer.rb +6 -7
  74. data/lib/rubygems/available_set.rb +1 -1
  75. data/lib/rubygems/basic_specification.rb +3 -3
  76. data/lib/rubygems/command.rb +17 -20
  77. data/lib/rubygems/command_manager.rb +1 -1
  78. data/lib/rubygems/commands/cert_command.rb +3 -3
  79. data/lib/rubygems/commands/check_command.rb +5 -1
  80. data/lib/rubygems/commands/cleanup_command.rb +1 -1
  81. data/lib/rubygems/commands/contents_command.rb +1 -1
  82. data/lib/rubygems/commands/dependency_command.rb +3 -4
  83. data/lib/rubygems/commands/help_command.rb +2 -2
  84. data/lib/rubygems/commands/open_command.rb +1 -3
  85. data/lib/rubygems/commands/owner_command.rb +9 -11
  86. data/lib/rubygems/commands/setup_command.rb +8 -8
  87. data/lib/rubygems/commands/specification_command.rb +5 -1
  88. data/lib/rubygems/commands/stale_command.rb +1 -1
  89. data/lib/rubygems/commands/uninstall_command.rb +6 -7
  90. data/lib/rubygems/commands/unpack_command.rb +4 -6
  91. data/lib/rubygems/commands/update_command.rb +3 -3
  92. data/lib/rubygems/commands/yank_command.rb +1 -1
  93. data/lib/rubygems/config_file.rb +60 -13
  94. data/lib/rubygems/core_ext/kernel_gem.rb +2 -2
  95. data/lib/rubygems/core_ext/kernel_require.rb +1 -1
  96. data/lib/rubygems/core_ext/kernel_warn.rb +4 -5
  97. data/lib/rubygems/defaults.rb +6 -2
  98. data/lib/rubygems/dependency_installer.rb +8 -12
  99. data/lib/rubygems/deprecate.rb +4 -3
  100. data/lib/rubygems/doctor.rb +1 -1
  101. data/lib/rubygems/errors.rb +1 -1
  102. data/lib/rubygems/exceptions.rb +1 -1
  103. data/lib/rubygems/ext/builder.rb +5 -4
  104. data/lib/rubygems/ext/cargo_builder.rb +2 -2
  105. data/lib/rubygems/gem_runner.rb +5 -1
  106. data/lib/rubygems/gemcutter_utilities.rb +4 -4
  107. data/lib/rubygems/indexer.rb +1 -1
  108. data/lib/rubygems/install_update_options.rb +1 -1
  109. data/lib/rubygems/installer.rb +17 -19
  110. data/lib/rubygems/name_tuple.rb +1 -1
  111. data/lib/rubygems/package/old.rb +1 -1
  112. data/lib/rubygems/package/tar_reader/entry.rb +18 -20
  113. data/lib/rubygems/package/tar_reader.rb +0 -5
  114. data/lib/rubygems/package/tar_writer.rb +1 -1
  115. data/lib/rubygems/package.rb +18 -12
  116. data/lib/rubygems/platform.rb +6 -2
  117. data/lib/rubygems/query_utils.rb +5 -5
  118. data/lib/rubygems/remote_fetcher.rb +10 -2
  119. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  120. data/lib/rubygems/request_set.rb +2 -1
  121. data/lib/rubygems/requirement.rb +1 -1
  122. data/lib/rubygems/resolver/activation_request.rb +2 -4
  123. data/lib/rubygems/resolver/api_set.rb +2 -1
  124. data/lib/rubygems/resolver/api_specification.rb +1 -1
  125. data/lib/rubygems/resolver/installed_specification.rb +1 -1
  126. data/lib/rubygems/resolver/local_specification.rb +1 -1
  127. data/lib/rubygems/s3_uri_signer.rb +1 -1
  128. data/lib/rubygems/security/signer.rb +10 -2
  129. data/lib/rubygems/security/trust_dir.rb +8 -10
  130. data/lib/rubygems/security.rb +2 -2
  131. data/lib/rubygems/security_option.rb +1 -1
  132. data/lib/rubygems/source/local.rb +34 -37
  133. data/lib/rubygems/source.rb +7 -3
  134. data/lib/rubygems/source_list.rb +2 -2
  135. data/lib/rubygems/spec_fetcher.rb +29 -33
  136. data/lib/rubygems/specification.rb +43 -36
  137. data/lib/rubygems/specification_policy.rb +36 -35
  138. data/lib/rubygems/stub_specification.rb +13 -10
  139. data/lib/rubygems/uninstaller.rb +2 -2
  140. data/lib/rubygems/update_suggestion.rb +1 -1
  141. data/lib/rubygems/user_interaction.rb +2 -2
  142. data/lib/rubygems/util/licenses.rb +115 -0
  143. data/lib/rubygems/util.rb +5 -1
  144. data/lib/rubygems/validator.rb +5 -7
  145. data/lib/rubygems/version.rb +3 -2
  146. data/lib/rubygems/yaml_serializer.rb +88 -0
  147. data/lib/rubygems.rb +8 -10
  148. data/rubygems-update.gemspec +1 -1
  149. data/setup.rb +2 -0
  150. data/test/rubygems/bundler_test_gem.rb +6 -3
  151. data/test/rubygems/helper.rb +38 -32
  152. data/test/rubygems/package/tar_test_case.rb +2 -2
  153. data/test/rubygems/test_gem.rb +55 -30
  154. data/test/rubygems/test_gem_command.rb +3 -1
  155. data/test/rubygems/test_gem_commands_build_command.rb +2 -1
  156. data/test/rubygems/test_gem_commands_cert_command.rb +22 -22
  157. data/test/rubygems/test_gem_commands_cleanup_command.rb +2 -2
  158. data/test/rubygems/test_gem_commands_environment_command.rb +2 -1
  159. data/test/rubygems/test_gem_commands_exec_command.rb +5 -1
  160. data/test/rubygems/test_gem_commands_install_command.rb +3 -3
  161. data/test/rubygems/test_gem_commands_open_command.rb +5 -2
  162. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
  163. data/test/rubygems/test_gem_commands_push_command.rb +7 -6
  164. data/test/rubygems/test_gem_commands_signin_command.rb +8 -8
  165. data/test/rubygems/test_gem_commands_stale_command.rb +1 -1
  166. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
  167. data/test/rubygems/test_gem_commands_unpack_command.rb +2 -2
  168. data/test/rubygems/test_gem_config_file.rb +46 -12
  169. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +28 -12
  170. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +1 -1
  171. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +16 -14
  172. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  173. data/test/rubygems/test_gem_ext_cargo_builder.rb +2 -2
  174. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  175. data/test/rubygems/test_gem_indexer.rb +1 -1
  176. data/test/rubygems/test_gem_install_update_options.rb +3 -3
  177. data/test/rubygems/test_gem_installer.rb +15 -15
  178. data/test/rubygems/test_gem_package.rb +152 -36
  179. data/test/rubygems/test_gem_package_old.rb +1 -1
  180. data/test/rubygems/test_gem_package_tar_header.rb +10 -10
  181. data/test/rubygems/test_gem_package_tar_reader.rb +4 -4
  182. data/test/rubygems/test_gem_package_tar_reader_entry.rb +53 -1
  183. data/test/rubygems/test_gem_package_tar_writer.rb +41 -41
  184. data/test/rubygems/test_gem_rdoc.rb +2 -2
  185. data/test/rubygems/test_gem_remote_fetcher.rb +34 -34
  186. data/test/rubygems/test_gem_request.rb +5 -5
  187. data/test/rubygems/test_gem_request_connection_pools.rb +2 -1
  188. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +14 -7
  189. data/test/rubygems/test_gem_requirement.rb +1 -1
  190. data/test/rubygems/test_gem_security.rb +2 -2
  191. data/test/rubygems/test_gem_security_signer.rb +2 -2
  192. data/test/rubygems/test_gem_security_trust_dir.rb +6 -6
  193. data/test/rubygems/test_gem_spec_fetcher.rb +2 -2
  194. data/test/rubygems/test_gem_specification.rb +71 -35
  195. data/test/rubygems/test_gem_update_suggestion.rb +23 -23
  196. data/test/rubygems/test_gem_util.rb +2 -2
  197. data/test/rubygems/test_gem_version.rb +4 -2
  198. data/test/rubygems/test_require.rb +4 -6
  199. data/test/rubygems/utilities.rb +4 -3
  200. metadata +4 -3
@@ -10,8 +10,8 @@ module Bundler
10
10
  i
11
11
  end
12
12
 
13
- attr_reader :specs, :all_specs, :sources
14
- protected :specs, :all_specs
13
+ attr_reader :specs, :duplicates, :sources
14
+ protected :specs, :duplicates
15
15
 
16
16
  RUBY = "ruby"
17
17
  NULL = "\0"
@@ -19,21 +19,21 @@ module Bundler
19
19
  def initialize
20
20
  @sources = []
21
21
  @cache = {}
22
- @specs = Hash.new {|h, k| h[k] = {} }
23
- @all_specs = Hash.new {|h, k| h[k] = EMPTY_SEARCH }
22
+ @specs = {}
23
+ @duplicates = {}
24
24
  end
25
25
 
26
26
  def initialize_copy(o)
27
27
  @sources = o.sources.dup
28
28
  @cache = {}
29
- @specs = Hash.new {|h, k| h[k] = {} }
30
- @all_specs = Hash.new {|h, k| h[k] = EMPTY_SEARCH }
29
+ @specs = {}
30
+ @duplicates = {}
31
31
 
32
32
  o.specs.each do |name, hash|
33
33
  @specs[name] = hash.dup
34
34
  end
35
- o.all_specs.each do |name, array|
36
- @all_specs[name] = array.dup
35
+ o.duplicates.each do |name, array|
36
+ @duplicates[name] = array.dup
37
37
  end
38
38
  end
39
39
 
@@ -46,12 +46,11 @@ module Bundler
46
46
  true
47
47
  end
48
48
 
49
- def search_all(name)
50
- all_matches = local_search(name) + @all_specs[name]
51
- @sources.each do |source|
52
- all_matches.concat(source.search_all(name))
53
- end
54
- all_matches
49
+ def search_all(name, &blk)
50
+ return enum_for(:search_all, name) unless blk
51
+ specs_by_name(name).each(&blk)
52
+ @duplicates[name]&.each(&blk)
53
+ @sources.each {|source| source.search_all(name, &blk) }
55
54
  end
56
55
 
57
56
  # Search this index's specs, and any source indexes that this index knows
@@ -61,11 +60,14 @@ module Bundler
61
60
  return results unless @sources.any?
62
61
 
63
62
  @sources.each do |source|
64
- results.concat(source.search(query))
63
+ results = safe_concat(results, source.search(query))
65
64
  end
66
- results.uniq(&:full_name)
65
+ results.uniq!(&:full_name) unless results.empty? # avoid modifying frozen EMPTY_SEARCH
66
+ results
67
67
  end
68
68
 
69
+ alias_method :[], :search
70
+
69
71
  def local_search(query)
70
72
  case query
71
73
  when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query)
@@ -76,12 +78,10 @@ module Bundler
76
78
  end
77
79
  end
78
80
 
79
- alias_method :[], :search
80
-
81
- def <<(spec)
82
- @specs[spec.name][spec.full_name] = spec
83
- spec
81
+ def add(spec)
82
+ (@specs[spec.name] ||= {}).store(spec.full_name, spec)
84
83
  end
84
+ alias_method :<<, :add
85
85
 
86
86
  def each(&blk)
87
87
  return enum_for(:each) unless blk
@@ -115,15 +115,25 @@ module Bundler
115
115
  names.uniq
116
116
  end
117
117
 
118
- def use(other, override_dupes = false)
118
+ # Combines indexes proritizing existing specs, like `Hash#reverse_merge!`
119
+ # Duplicate specs found in `other` are stored in `@duplicates`.
120
+ def use(other)
119
121
  return unless other
120
- other.each do |s|
121
- if (dupes = search_by_spec(s)) && !dupes.empty?
122
- # safe to << since it's a new array when it has contents
123
- @all_specs[s.name] = dupes << s
124
- next unless override_dupes
122
+ other.each do |spec|
123
+ exist?(spec) ? add_duplicate(spec) : add(spec)
124
+ end
125
+ self
126
+ end
127
+
128
+ # Combines indexes proritizing specs from `other`, like `Hash#merge!`
129
+ # Duplicate specs found in `self` are saved in `@duplicates`.
130
+ def merge!(other)
131
+ return unless other
132
+ other.each do |spec|
133
+ if existing = find_by_spec(spec)
134
+ add_duplicate(existing)
125
135
  end
126
- self << s
136
+ add spec
127
137
  end
128
138
  self
129
139
  end
@@ -157,19 +167,40 @@ module Bundler
157
167
 
158
168
  private
159
169
 
170
+ def safe_concat(a, b)
171
+ return a if b.empty?
172
+ return b if a.empty?
173
+ a.concat(b)
174
+ end
175
+
176
+ def add_duplicate(spec)
177
+ (@duplicates[spec.name] ||= []) << spec
178
+ end
179
+
160
180
  def specs_by_name_and_version(name, version)
161
- specs_by_name(name).select {|spec| spec.version == version }
181
+ results = @specs[name]&.values
182
+ return EMPTY_SEARCH unless results
183
+ results.select! {|spec| spec.version == version }
184
+ results
162
185
  end
163
186
 
164
187
  def specs_by_name(name)
165
- @specs[name].values
188
+ @specs[name]&.values || EMPTY_SEARCH
166
189
  end
167
190
 
168
191
  EMPTY_SEARCH = [].freeze
169
192
 
170
193
  def search_by_spec(spec)
171
- spec = @specs[spec.name][spec.full_name]
194
+ spec = find_by_spec(spec)
172
195
  spec ? [spec] : EMPTY_SEARCH
173
196
  end
197
+
198
+ def find_by_spec(spec)
199
+ @specs[spec.name]&.fetch(spec.full_name, nil)
200
+ end
201
+
202
+ def exist?(spec)
203
+ @specs[spec.name]&.key?(spec.full_name)
204
+ end
174
205
  end
175
206
  end
@@ -86,7 +86,7 @@ module Bundler
86
86
  segments = version.segments
87
87
  seg_end_index = version >= Gem::Version.new("1.0") ? 1 : 2
88
88
 
89
- prerelease_suffix = version.to_s.gsub(version.release.to_s, "") if version.prerelease?
89
+ prerelease_suffix = version.to_s.delete_prefix(version.release.to_s) if version.prerelease?
90
90
  "#{version_prefix}#{segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
91
91
  end
92
92
 
@@ -91,38 +91,12 @@ module Bundler
91
91
  install_serially
92
92
  end
93
93
 
94
- check_for_unmet_dependencies
95
-
96
94
  handle_error if failed_specs.any?
97
95
  @specs
98
96
  ensure
99
97
  worker_pool&.stop
100
98
  end
101
99
 
102
- def check_for_unmet_dependencies
103
- unmet_dependencies = @specs.map do |s|
104
- [
105
- s,
106
- s.dependencies.reject {|dep| @specs.any? {|spec| dep.matches_spec?(spec.spec) } },
107
- ]
108
- end.reject {|a| a.last.empty? }
109
- return if unmet_dependencies.empty?
110
-
111
- warning = []
112
- warning << "Your lockfile doesn't include a valid resolution."
113
- warning << "You can fix this by regenerating your lockfile or manually editing the bad locked gems to a version that satisfies all dependencies."
114
- warning << "The unmet dependencies are:"
115
-
116
- unmet_dependencies.each do |spec, unmet_spec_dependencies|
117
- unmet_spec_dependencies.each do |unmet_spec_dependency|
118
- found = @specs.find {|s| s.name == unmet_spec_dependency.name && !unmet_spec_dependency.matches_spec?(s.spec) }
119
- warning << "* #{unmet_spec_dependency}, dependency of #{spec.full_name}, unsatisfied by #{found.full_name}"
120
- end
121
- end
122
-
123
- Bundler.ui.warn(warning.join("\n"))
124
- end
125
-
126
100
  private
127
101
 
128
102
  def failed_specs
@@ -12,6 +12,7 @@ module Bundler
12
12
  end
13
13
  File.open File.join(bundler_path, "setup.rb"), "w" do |file|
14
14
  file.puts "require 'rbconfig'"
15
+ file.puts prevent_gem_activation
15
16
  file.puts define_path_helpers
16
17
  file.puts reverse_rubygems_kernel_mixin
17
18
  paths.each do |path|
@@ -55,13 +56,26 @@ module Bundler
55
56
  if spec.source.instance_of?(Source::Path) && spec.source.path.absolute?
56
57
  full_path
57
58
  else
58
- Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s
59
+ SharedHelpers.relative_path_to(full_path, :from => Bundler.root.join(bundler_path))
59
60
  end
60
61
  rescue TypeError
61
62
  error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
62
63
  raise Gem::InvalidSpecificationException.new(error_message)
63
64
  end
64
65
 
66
+ def prevent_gem_activation
67
+ <<~'END'
68
+ module Kernel
69
+ remove_method(:gem) if private_method_defined?(:gem)
70
+
71
+ def gem(*)
72
+ end
73
+
74
+ private :gem
75
+ end
76
+ END
77
+ end
78
+
65
79
  def define_path_helpers
66
80
  <<~'END'
67
81
  unless defined?(Gem)
@@ -23,13 +23,15 @@ module Bundler
23
23
  Gem::Version.create("1.13") => [PLUGIN].freeze,
24
24
  }.freeze
25
25
 
26
- KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten.freeze
26
+ KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten!.freeze
27
27
 
28
28
  ENVIRONMENT_VERSION_SECTIONS = [BUNDLED, RUBY].freeze
29
29
  deprecate_constant(:ENVIRONMENT_VERSION_SECTIONS)
30
30
 
31
31
  def self.sections_in_lockfile(lockfile_contents)
32
- lockfile_contents.scan(/^\w[\w ]*$/).uniq
32
+ sections = lockfile_contents.scan(/^\w[\w ]*$/)
33
+ sections.uniq!
34
+ sections
33
35
  end
34
36
 
35
37
  def self.unknown_sections_in_lockfile(lockfile_contents)
@@ -38,7 +40,7 @@ module Bundler
38
40
 
39
41
  def self.sections_to_ignore(base_version = nil)
40
42
  base_version &&= base_version.release
41
- base_version ||= Gem::Version.create("1.0".dup)
43
+ base_version ||= Gem::Version.create("1.0")
42
44
  attributes = []
43
45
  SECTIONS_BY_VERSION_INTRODUCED.each do |version, introduced|
44
46
  next if version <= base_version
@@ -61,36 +63,36 @@ module Bundler
61
63
  @platforms = []
62
64
  @sources = []
63
65
  @dependencies = {}
64
- @state = nil
66
+ @parse_method = nil
65
67
  @specs = {}
66
68
 
67
69
  if lockfile.match?(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
68
- raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \
69
- "Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock."
70
+ raise LockfileError, "Your lockfile contains merge conflicts.\n" \
71
+ "Run `git checkout HEAD -- #{SharedHelpers.relative_lockfile_path}` first to get a clean lock."
70
72
  end
71
73
 
72
- lockfile.split(/(?:\r?\n)+/).each do |line|
74
+ lockfile.split(/(?:\r?\n)+/) do |line|
73
75
  if SOURCE.include?(line)
74
- @state = :source
76
+ @parse_method = :parse_source
75
77
  parse_source(line)
76
78
  elsif line == DEPENDENCIES
77
- @state = :dependency
79
+ @parse_method = :parse_dependency
78
80
  elsif line == PLATFORMS
79
- @state = :platform
81
+ @parse_method = :parse_platform
80
82
  elsif line == RUBY
81
- @state = :ruby
83
+ @parse_method = :parse_ruby
82
84
  elsif line == BUNDLED
83
- @state = :bundled_with
85
+ @parse_method = :parse_bundled_with
84
86
  elsif /^[^\s]/.match?(line)
85
- @state = nil
86
- elsif @state
87
- send("parse_#{@state}", line)
87
+ @parse_method = nil
88
+ elsif @parse_method
89
+ send(@parse_method, line)
88
90
  end
89
91
  end
90
- @specs = @specs.values.sort_by(&:full_name)
92
+ @specs = @specs.values.sort_by!(&:full_name)
91
93
  rescue ArgumentError => e
92
94
  Bundler.ui.debug(e)
93
- raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
95
+ raise LockfileError, "Your lockfile is unreadable. Run `rm #{SharedHelpers.relative_lockfile_path}` " \
94
96
  "and then `bundle install` to generate a new lockfile."
95
97
  end
96
98
 
@@ -110,21 +112,9 @@ module Bundler
110
112
  def parse_source(line)
111
113
  case line
112
114
  when SPECS
113
- case @type
114
- when PATH
115
- @current_source = TYPES[@type].from_lock(@opts)
116
- @sources << @current_source
117
- when GIT
118
- @current_source = TYPES[@type].from_lock(@opts)
119
- @sources << @current_source
120
- when GEM
121
- @opts["remotes"] = Array(@opts.delete("remote")).reverse
122
- @current_source = TYPES[@type].from_lock(@opts)
123
- @sources << @current_source
124
- when PLUGIN
125
- @current_source = Plugin.source_from_lock(@opts)
126
- @sources << @current_source
127
- end
115
+ return unless TYPES.key?(@type)
116
+ @current_source = TYPES[@type].from_lock(@opts)
117
+ @sources << @current_source
128
118
  when OPTIONS
129
119
  value = $2
130
120
  value = true if value == "true"
@@ -161,11 +151,11 @@ module Bundler
161
151
  return unless line =~ NAME_VERSION
162
152
  spaces = $1
163
153
  return unless spaces.size == 2
164
- name = $2
154
+ name = -$2
165
155
  version = $3
166
156
  pinned = $5
167
157
 
168
- version = version.split(",").map(&:strip) if version
158
+ version = version.split(",").each(&:strip!) if version
169
159
 
170
160
  dep = Bundler::Dependency.new(name, version)
171
161
 
@@ -189,11 +179,13 @@ module Bundler
189
179
  def parse_spec(line)
190
180
  return unless line =~ NAME_VERSION
191
181
  spaces = $1
192
- name = $2
182
+ name = -$2
193
183
  version = $3
194
- platform = $4
195
184
 
196
185
  if spaces.size == 4
186
+ # only load platform for non-dependency (spec) line
187
+ platform = $4
188
+
197
189
  version = Gem::Version.new(version)
198
190
  platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
199
191
  @current_spec = LazySpecification.new(name, version, platform)
@@ -202,7 +194,7 @@ module Bundler
202
194
 
203
195
  @specs[@current_spec.full_name] = @current_spec
204
196
  elsif spaces.size == 6
205
- version = version.split(",").map(&:strip) if version
197
+ version = version.split(",").each(&:strip!) if version
206
198
  dep = Gem::Dependency.new(name, version)
207
199
  @current_spec.dependencies << dep
208
200
  end
@@ -213,13 +205,14 @@ module Bundler
213
205
  end
214
206
 
215
207
  def parse_bundled_with(line)
216
- line = line.strip
208
+ line.strip!
217
209
  return unless Gem::Version.correct?(line)
218
210
  @bundler_version = Gem::Version.create(line)
219
211
  end
220
212
 
221
213
  def parse_ruby(line)
222
- @ruby_version = line.strip
214
+ line.strip!
215
+ @ruby_version = line
223
216
  end
224
217
  end
225
218
  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\-ADD" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-ADD" "1" "October 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" "August 2023" "" ""
4
+ .TH "BUNDLE\-BINSTUBS" "1" "October 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" "August 2023" "" ""
4
+ .TH "BUNDLE\-CACHE" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
@@ -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" "August 2023" "" ""
4
+ .TH "BUNDLE\-CHECK" "1" "October 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" "August 2023" "" ""
4
+ .TH "BUNDLE\-CLEAN" "1" "October 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" "August 2023" "" ""
4
+ .TH "BUNDLE\-CONFIG" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-config\fR \- Set bundler configuration options
@@ -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" "August 2023" "" ""
4
+ .TH "BUNDLE\-CONSOLE" "1" "October 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" "August 2023" "" ""
4
+ .TH "BUNDLE\-DOCTOR" "1" "October 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" "August 2023" "" ""
4
+ .TH "BUNDLE\-EXEC" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-exec\fR \- Execute a command in the context of the bundle
@@ -22,7 +22,7 @@ Note that \fBbundle exec\fR does not require that an executable is available on
22
22
  .
23
23
  .TP
24
24
  \fB\-\-keep\-file\-descriptors\fR
25
- Exec in Ruby 2\.0 began discarding non\-standard file descriptors\. When this flag is passed, exec will revert to the 1\.9 behaviour of passing all file descriptors to the new process\.
25
+ Passes all file descriptors to the new processes\. Default is true from bundler version 2\.2\.26\. Setting it to false is now deprecated\.
26
26
  .
27
27
  .SH "BUNDLE INSTALL \-\-BINSTUBS"
28
28
  If you use the \fB\-\-binstubs\fR flag in bundle install(1) \fIbundle\-install\.1\.html\fR, Bundler will automatically create a directory (which defaults to \fBapp_root/bin\fR) containing all of the executables available from gems in the bundle\.
@@ -21,9 +21,8 @@ available on your shell's `$PATH`.
21
21
  ## OPTIONS
22
22
 
23
23
  * `--keep-file-descriptors`:
24
- Exec in Ruby 2.0 began discarding non-standard file descriptors. When this
25
- flag is passed, exec will revert to the 1.9 behaviour of passing all file
26
- descriptors to the new process.
24
+ Passes all file descriptors to the new processes. Default is true from
25
+ bundler version 2.2.26. Setting it to false is now deprecated.
27
26
 
28
27
  ## BUNDLE INSTALL --BINSTUBS
29
28
 
@@ -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" "August 2023" "" ""
4
+ .TH "BUNDLE\-GEM" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
@@ -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\-HELP" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-HELP" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-help\fR \- Displays detailed help for each subcommand
@@ -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\-INFO" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-INFO" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-info\fR \- Show information for the given gem in your bundle
@@ -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\-INIT" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-INIT" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-init\fR \- Generates a Gemfile into the current working 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\-INJECT" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-INJECT" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
@@ -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\-INSTALL" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-INSTALL" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
@@ -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\-LIST" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-LIST" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-list\fR \- List all the gems in the bundle
@@ -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\-LOCK" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-LOCK" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
@@ -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\-OPEN" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-OPEN" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
@@ -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\-OUTDATED" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-OUTDATED" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-outdated\fR \- List installed gems with newer versions available
@@ -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\-PLATFORM" "1" "August 2023" "" ""
4
+ .TH "BUNDLE\-PLATFORM" "1" "October 2023" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-platform\fR \- Displays platform compatibility information