Skip to content

Commit ef3c4a7

Browse files
hsbtk0kubun
authored andcommitted
Merge RubyGems-3.5.18 and Bundler-2.5.18
1 parent 95f72a4 commit ef3c4a7

File tree

32 files changed

+396
-76
lines changed

32 files changed

+396
-76
lines changed

lib/bundler/cli/install.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ def run
2525

2626
if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
2727
unless Bundler.default_lockfile.exist?
28-
flag = "--deployment flag" if options[:deployment]
29-
flag ||= "--frozen flag" if options[:frozen]
30-
flag ||= "deployment setting"
28+
flag = "--deployment flag" if options[:deployment]
29+
flag ||= "--frozen flag" if options[:frozen]
30+
flag ||= "deployment setting" if Bundler.settings[:deployment]
31+
flag ||= "frozen setting" if Bundler.settings[:frozen]
3132
raise ProductionError, "The #{flag} requires a lockfile. Please make " \
3233
"sure you have checked your #{SharedHelpers.relative_lockfile_path} into version control " \
3334
"before deploying."

lib/bundler/definition.rb

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ def missing_specs?
214214
@resolve = nil
215215
@resolver = nil
216216
@resolution_packages = nil
217+
@source_requirements = nil
217218
@specs = nil
218219

219220
Bundler.ui.debug "The definition is missing dependencies, failed to resolve & materialize locally (#{e})"
@@ -476,9 +477,6 @@ def most_specific_locked_platform
476477
end
477478
end
478479

479-
attr_reader :sources
480-
private :sources
481-
482480
def nothing_changed?
483481
return false unless lockfile_exists?
484482

@@ -502,8 +500,12 @@ def unlocking?
502500
@unlocking
503501
end
504502

503+
attr_writer :source_requirements
504+
505505
private
506506

507+
attr_reader :sources
508+
507509
def should_add_extra_platforms?
508510
!lockfile_exists? && generic_local_platform_is_ruby? && !Bundler.settings[:force_ruby_platform]
509511
end
@@ -569,7 +571,7 @@ def resolution_packages
569571
@resolution_packages ||= begin
570572
last_resolve = converge_locked_specs
571573
remove_invalid_platforms!
572-
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @gems_to_unlock, prerelease: gem_version_promoter.pre?)
574+
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @gems_to_unlock, prerelease: gem_version_promoter.pre?, prefer_local: @prefer_local)
573575
packages = additional_base_requirements_to_prevent_downgrades(packages, last_resolve)
574576
packages = additional_base_requirements_to_force_updates(packages)
575577
packages
@@ -653,19 +655,6 @@ def precompute_source_requirements_for_indirect_dependencies?
653655
sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
654656
end
655657

656-
def pin_locally_available_names(source_requirements)
657-
source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
658-
local_source = original_source.dup
659-
local_source.local_only!
660-
661-
new_source_requirements[name] = if local_source.specs.search(name).any?
662-
local_source
663-
else
664-
original_source
665-
end
666-
end
667-
end
668-
669658
def current_platform_locked?
670659
@platforms.any? do |bundle_platform|
671660
MatchPlatform.platforms_match?(bundle_platform, local_platform)
@@ -972,12 +961,15 @@ def metadata_dependencies
972961
end
973962

974963
def source_requirements
964+
@source_requirements ||= find_source_requirements
965+
end
966+
967+
def find_source_requirements
975968
# Record the specs available in each gem's source, so that those
976969
# specs will be available later when the resolver knows where to
977970
# look for that gemspec (or its dependencies)
978971
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
979972
all_requirements = source_map.all_requirements
980-
all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
981973
{ default: default_source }.merge(all_requirements)
982974
else
983975
{ default: Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
@@ -1053,6 +1045,7 @@ def additional_base_requirements_to_force_updates(resolution_packages)
10531045

10541046
def dup_for_full_unlock
10551047
unlocked_definition = self.class.new(@lockfile, @dependencies, @sources, true, @ruby_version, @optional_groups, @gemfiles)
1048+
unlocked_definition.source_requirements = source_requirements
10561049
unlocked_definition.gem_version_promoter.tap do |gvp|
10571050
gvp.level = gem_version_promoter.level
10581051
gvp.strict = gem_version_promoter.strict

lib/bundler/lockfile_parser.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def parse_spec(line)
272272
end
273273

274274
def parse_platform(line)
275-
@platforms << Gem::Platform.new($1) if line =~ /^ (.*)$/
275+
@platforms << Gem::Platform.new($1.strip) if line =~ /^ (.*)$/
276276
end
277277

278278
def parse_bundled_with(line)

lib/bundler/resolver.rb

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ def solve_versions(root:, logger:)
8484
rescue PubGrub::SolveFailure => e
8585
incompatibility = e.incompatibility
8686

87-
names_to_unlock, names_to_allow_prereleases_for, extended_explanation = find_names_to_relax(incompatibility)
87+
names_to_unlock, names_to_allow_prereleases_for, names_to_allow_remote_specs_for, extended_explanation = find_names_to_relax(incompatibility)
8888

89-
names_to_relax = names_to_unlock + names_to_allow_prereleases_for
89+
names_to_relax = names_to_unlock + names_to_allow_prereleases_for + names_to_allow_remote_specs_for
9090

9191
if names_to_relax.any?
9292
if names_to_unlock.any?
@@ -96,11 +96,17 @@ def solve_versions(root:, logger:)
9696
end
9797

9898
if names_to_allow_prereleases_for.any?
99-
Bundler.ui.debug "Found conflicts with dependencies with prereleases. Will retrying considering prereleases for #{names_to_allow_prereleases_for.join(", ")}...", true
99+
Bundler.ui.debug "Found conflicts with dependencies with prereleases. Will retry considering prereleases for #{names_to_allow_prereleases_for.join(", ")}...", true
100100

101101
@base.include_prereleases(names_to_allow_prereleases_for)
102102
end
103103

104+
if names_to_allow_remote_specs_for.any?
105+
Bundler.ui.debug "Found conflicts with local versions of #{names_to_allow_remote_specs_for.join(", ")}. Will retry considering remote versions...", true
106+
107+
@base.include_remote_specs(names_to_allow_remote_specs_for)
108+
end
109+
104110
root, logger = setup_solver
105111

106112
Bundler.ui.debug "Retrying resolution...", true
@@ -120,6 +126,7 @@ def solve_versions(root:, logger:)
120126
def find_names_to_relax(incompatibility)
121127
names_to_unlock = []
122128
names_to_allow_prereleases_for = []
129+
names_to_allow_remote_specs_for = []
123130
extended_explanation = nil
124131

125132
while incompatibility.conflict?
@@ -134,6 +141,8 @@ def find_names_to_relax(incompatibility)
134141
names_to_unlock << name
135142
elsif package.ignores_prereleases? && @all_specs[name].any? {|s| s.version.prerelease? }
136143
names_to_allow_prereleases_for << name
144+
elsif package.prefer_local? && @all_specs[name].any? {|s| !s.is_a?(StubSpecification) }
145+
names_to_allow_remote_specs_for << name
137146
end
138147

139148
no_versions_incompat = [cause.incompatibility, cause.satisfier].find {|incompat| incompat.cause.is_a?(PubGrub::Incompatibility::NoVersions) }
@@ -143,7 +152,7 @@ def find_names_to_relax(incompatibility)
143152
end
144153
end
145154

146-
[names_to_unlock.uniq, names_to_allow_prereleases_for.uniq, extended_explanation]
155+
[names_to_unlock.uniq, names_to_allow_prereleases_for.uniq, names_to_allow_remote_specs_for.uniq, extended_explanation]
147156
end
148157

149158
def parse_dependency(package, dependency)
@@ -244,7 +253,7 @@ def incompatibilities_for(package, version)
244253

245254
def all_versions_for(package)
246255
name = package.name
247-
results = (@base[name] + filter_prereleases(@all_specs[name], package)).uniq {|spec| [spec.version.hash, spec.platform] }
256+
results = (@base[name] + filter_specs(@all_specs[name], package)).uniq {|spec| [spec.version.hash, spec.platform] }
248257

249258
if name == "bundler" && !bundler_pinned_to_current_version?
250259
bundler_spec = Gem.loaded_specs["bundler"]
@@ -368,12 +377,22 @@ def filter_matching_specs(specs, requirements)
368377
end
369378
end
370379

380+
def filter_specs(specs, package)
381+
filter_remote_specs(filter_prereleases(specs, package), package)
382+
end
383+
371384
def filter_prereleases(specs, package)
372385
return specs unless package.ignores_prereleases? && specs.size > 1
373386

374387
specs.reject {|s| s.version.prerelease? }
375388
end
376389

390+
def filter_remote_specs(specs, package)
391+
return specs unless package.prefer_local?
392+
393+
specs.select {|s| s.is_a?(StubSpecification) }
394+
end
395+
377396
# Ignore versions that depend on themselves incorrectly
378397
def filter_invalid_self_dependencies(specs, name)
379398
specs.reject do |s|
@@ -405,10 +424,13 @@ def prepare_dependencies(requirements, packages)
405424

406425
dep_range = dep_constraint.range
407426
versions = select_sorted_versions(dep_package, dep_range)
408-
if versions.empty? && dep_package.ignores_prereleases?
409-
@all_versions.delete(dep_package)
410-
@sorted_versions.delete(dep_package)
411-
dep_package.consider_prereleases!
427+
if versions.empty?
428+
if dep_package.ignores_prereleases? || dep_package.prefer_local?
429+
@all_versions.delete(dep_package)
430+
@sorted_versions.delete(dep_package)
431+
end
432+
dep_package.consider_prereleases! if dep_package.ignores_prereleases?
433+
dep_package.consider_remote_versions! if dep_package.prefer_local?
412434
versions = select_sorted_versions(dep_package, dep_range)
413435
end
414436

lib/bundler/resolver/base.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ def include_prereleases(names)
7272
end
7373
end
7474

75+
def include_remote_specs(names)
76+
names.each do |name|
77+
get_package(name).consider_remote_versions!
78+
end
79+
end
80+
7581
private
7682

7783
def indirect_pins(names)

lib/bundler/resolver/package.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ class Resolver
1515
class Package
1616
attr_reader :name, :platforms, :dependency, :locked_version
1717

18-
def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, dependency: nil)
18+
def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, prefer_local: false, dependency: nil)
1919
@name = name
2020
@platforms = platforms
2121
@locked_version = locked_specs[name].first&.version
2222
@unlock = unlock
2323
@dependency = dependency || Dependency.new(name, @locked_version)
2424
@top_level = !dependency.nil?
2525
@prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
26+
@prefer_local = prefer_local
2627
end
2728

2829
def platform_specs(specs)
@@ -69,6 +70,14 @@ def consider_prereleases!
6970
@prerelease = :consider_last
7071
end
7172

73+
def prefer_local?
74+
@prefer_local
75+
end
76+
77+
def consider_remote_versions!
78+
@prefer_local = false
79+
end
80+
7281
def force_ruby_platform?
7382
@dependency.force_ruby_platform
7483
end

lib/bundler/source/git.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,11 @@ def local_override!(path)
188188
end
189189

190190
def specs(*)
191-
set_cache_path!(app_cache_path) if has_app_cache? && !local?
191+
set_cache_path!(app_cache_path) if use_app_cache?
192192

193193
if requires_checkout? && !@copied
194+
FileUtils.rm_rf(app_cache_path) if use_app_cache? && git_proxy.not_a_bare_repository?
195+
194196
fetch
195197
checkout
196198
end
@@ -321,6 +323,10 @@ def has_app_cache?
321323
cached_revision && super
322324
end
323325

326+
def use_app_cache?
327+
has_app_cache? && !local?
328+
end
329+
324330
def requires_checkout?
325331
allow_git_ops? && !local? && !cached_revision_checked_out?
326332
end

lib/bundler/source/git/git_proxy.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ def current_branch
8484
end
8585
end
8686

87+
def not_a_bare_repository?
88+
git_local("rev-parse", "--is-bare-repository", dir: path).strip == "false"
89+
end
90+
8791
def contains?(commit)
8892
allowed_with_path do
8993
result, status = git_null("branch", "--contains", commit, dir: path)
@@ -332,8 +336,6 @@ def configured_uri
332336
config_auth = Bundler.settings[remote.to_s] || Bundler.settings[remote.host]
333337
remote.userinfo ||= config_auth
334338
remote.to_s
335-
elsif File.exist?(uri)
336-
"file://#{uri}"
337339
else
338340
uri.to_s
339341
end

lib/bundler/templates/newgem/README.md.tt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_O
1010

1111
Install the gem and add to the application's Gemfile by executing:
1212

13-
$ bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
13+
```bash
14+
bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
15+
```
1416

1517
If bundler is not being used to manage dependencies, install the gem by executing:
1618

17-
$ gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
19+
```bash
20+
gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
21+
```
1822

1923
## Usage
2024

lib/bundler/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: false
22

33
module Bundler
4-
VERSION = "2.5.17".freeze
4+
VERSION = "2.5.18".freeze
55

66
def self.bundler_major_version
77
@bundler_major_version ||= VERSION.split(".").first.to_i

0 commit comments

Comments
 (0)