bundler 2.6.6 → 2.6.8
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -6
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/checksum.rb +21 -11
- data/lib/bundler/compact_index_client/cache.rb +1 -1
- data/lib/bundler/compact_index_client/parser.rb +1 -1
- data/lib/bundler/definition.rb +90 -65
- data/lib/bundler/dsl.rb +2 -3
- data/lib/bundler/friendly_errors.rb +1 -1
- data/lib/bundler/installer.rb +1 -1
- data/lib/bundler/lazy_specification.rb +9 -1
- data/lib/bundler/lockfile_parser.rb +8 -5
- data/lib/bundler/plugin/api/source.rb +1 -1
- data/lib/bundler/plugin/installer/path.rb +8 -0
- data/lib/bundler/plugin.rb +1 -1
- data/lib/bundler/resolver/candidate.rb +1 -1
- data/lib/bundler/resolver/strategy.rb +40 -0
- data/lib/bundler/resolver.rb +11 -22
- data/lib/bundler/rubygems_ext.rb +15 -0
- data/lib/bundler/runtime.rb +8 -5
- data/lib/bundler/source/gemspec.rb +1 -4
- data/lib/bundler/source/git/git_proxy.rb +8 -3
- data/lib/bundler/source/path.rb +2 -2
- data/lib/bundler/source_list.rb +29 -11
- data/lib/bundler/spec_set.rb +27 -10
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
- data/lib/bundler/version.rb +1 -1
- metadata +5 -4
- data/lib/bundler/compact_index_client/gem_parser.rb +0 -32
@@ -2,17 +2,20 @@ require_relative 'partial_solution'
|
|
2
2
|
require_relative 'term'
|
3
3
|
require_relative 'incompatibility'
|
4
4
|
require_relative 'solve_failure'
|
5
|
+
require_relative 'strategy'
|
5
6
|
|
6
7
|
module Bundler::PubGrub
|
7
8
|
class VersionSolver
|
8
9
|
attr_reader :logger
|
9
10
|
attr_reader :source
|
10
11
|
attr_reader :solution
|
12
|
+
attr_reader :strategy
|
11
13
|
|
12
|
-
def initialize(source:, root: Package.root, logger: Bundler::PubGrub.logger)
|
14
|
+
def initialize(source:, root: Package.root, strategy: Strategy.new(source), logger: Bundler::PubGrub.logger)
|
13
15
|
@logger = logger
|
14
16
|
|
15
17
|
@source = source
|
18
|
+
@strategy = strategy
|
16
19
|
|
17
20
|
# { package => [incompatibility, ...]}
|
18
21
|
@incompatibilities = Hash.new do |h, k|
|
@@ -36,26 +39,25 @@ module Bundler::PubGrub
|
|
36
39
|
|
37
40
|
# Returns true if there is more work to be done, false otherwise
|
38
41
|
def work
|
39
|
-
|
40
|
-
|
41
|
-
next_package = choose_package_version
|
42
|
-
propagate(next_package)
|
43
|
-
|
44
|
-
if solved?
|
42
|
+
unsatisfied_terms = solution.unsatisfied
|
43
|
+
if unsatisfied_terms.empty?
|
45
44
|
logger.info { "Solution found after #{solution.attempted_solutions} attempts:" }
|
46
45
|
solution.decisions.each do |package, version|
|
47
46
|
next if Package.root?(package)
|
48
47
|
logger.info { "* #{package} #{version}" }
|
49
48
|
end
|
50
49
|
|
51
|
-
false
|
52
|
-
else
|
53
|
-
true
|
50
|
+
return false
|
54
51
|
end
|
52
|
+
|
53
|
+
next_package = choose_package_version_from(unsatisfied_terms)
|
54
|
+
propagate(next_package)
|
55
|
+
|
56
|
+
true
|
55
57
|
end
|
56
58
|
|
57
59
|
def solve
|
58
|
-
work
|
60
|
+
while work; end
|
59
61
|
|
60
62
|
solution.decisions
|
61
63
|
end
|
@@ -105,29 +107,15 @@ module Bundler::PubGrub
|
|
105
107
|
unsatisfied.package
|
106
108
|
end
|
107
109
|
|
108
|
-
def
|
109
|
-
|
110
|
-
package = term.package
|
111
|
-
range = term.constraint.range
|
112
|
-
matching_versions = source.versions_for(package, range)
|
113
|
-
higher_versions = source.versions_for(package, range.upper_invert)
|
110
|
+
def choose_package_version_from(unsatisfied_terms)
|
111
|
+
remaining = unsatisfied_terms.map { |t| [t.package, t.constraint.range] }.to_h
|
114
112
|
|
115
|
-
|
116
|
-
end.package
|
117
|
-
end
|
118
|
-
|
119
|
-
def choose_package_version
|
120
|
-
if solution.unsatisfied.empty?
|
121
|
-
logger.info "No packages unsatisfied. Solving complete!"
|
122
|
-
return nil
|
123
|
-
end
|
113
|
+
package, version = strategy.next_package_and_version(remaining)
|
124
114
|
|
125
|
-
package = next_package_to_try
|
126
|
-
unsatisfied_term = solution.unsatisfied.find { |t| t.package == package }
|
127
|
-
version = source.versions_for(package, unsatisfied_term.constraint.range).first
|
128
115
|
logger.debug { "attempting #{package} #{version}" }
|
129
116
|
|
130
117
|
if version.nil?
|
118
|
+
unsatisfied_term = unsatisfied_terms.find { |t| t.package == package }
|
131
119
|
add_incompatibility source.no_versions_incompatibility_for(package, unsatisfied_term)
|
132
120
|
return package
|
133
121
|
end
|
data/lib/bundler/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.6.
|
4
|
+
version: 2.6.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- André Arko
|
@@ -21,7 +21,7 @@ authors:
|
|
21
21
|
- Yehuda Katz
|
22
22
|
bindir: exe
|
23
23
|
cert_chain: []
|
24
|
-
date:
|
24
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
25
25
|
dependencies: []
|
26
26
|
description: Bundler manages an application's dependencies through its entire life,
|
27
27
|
across many machines, systematically and repeatably
|
@@ -77,7 +77,6 @@ files:
|
|
77
77
|
- lib/bundler/compact_index_client.rb
|
78
78
|
- lib/bundler/compact_index_client/cache.rb
|
79
79
|
- lib/bundler/compact_index_client/cache_file.rb
|
80
|
-
- lib/bundler/compact_index_client/gem_parser.rb
|
81
80
|
- lib/bundler/compact_index_client/parser.rb
|
82
81
|
- lib/bundler/compact_index_client/updater.rb
|
83
82
|
- lib/bundler/constants.rb
|
@@ -210,6 +209,7 @@ files:
|
|
210
209
|
- lib/bundler/resolver/package.rb
|
211
210
|
- lib/bundler/resolver/root.rb
|
212
211
|
- lib/bundler/resolver/spec_group.rb
|
212
|
+
- lib/bundler/resolver/strategy.rb
|
213
213
|
- lib/bundler/retry.rb
|
214
214
|
- lib/bundler/ruby_dsl.rb
|
215
215
|
- lib/bundler/ruby_version.rb
|
@@ -310,6 +310,7 @@ files:
|
|
310
310
|
- lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb
|
311
311
|
- lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb
|
312
312
|
- lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb
|
313
|
+
- lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb
|
313
314
|
- lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb
|
314
315
|
- lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb
|
315
316
|
- lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb
|
@@ -411,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
412
|
- !ruby/object:Gem::Version
|
412
413
|
version: 3.3.3
|
413
414
|
requirements: []
|
414
|
-
rubygems_version: 3.6.
|
415
|
+
rubygems_version: 3.6.8
|
415
416
|
specification_version: 4
|
416
417
|
summary: The best way to manage your application's dependencies
|
417
418
|
test_files: []
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bundler
|
4
|
-
class CompactIndexClient
|
5
|
-
if defined?(Gem::Resolver::APISet::GemParser)
|
6
|
-
GemParser = Gem::Resolver::APISet::GemParser
|
7
|
-
else
|
8
|
-
class GemParser
|
9
|
-
EMPTY_ARRAY = [].freeze
|
10
|
-
private_constant :EMPTY_ARRAY
|
11
|
-
|
12
|
-
def parse(line)
|
13
|
-
version_and_platform, rest = line.split(" ", 2)
|
14
|
-
version, platform = version_and_platform.split("-", 2)
|
15
|
-
dependencies, requirements = rest.split("|", 2).map! {|s| s.split(",") } if rest
|
16
|
-
dependencies = dependencies ? dependencies.map! {|d| parse_dependency(d) } : EMPTY_ARRAY
|
17
|
-
requirements = requirements ? requirements.map! {|d| parse_dependency(d) } : EMPTY_ARRAY
|
18
|
-
[version, platform, dependencies, requirements]
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def parse_dependency(string)
|
24
|
-
dependency = string.split(":")
|
25
|
-
dependency[-1] = dependency[-1].split("&") if dependency.size > 1
|
26
|
-
dependency[0] = -dependency[0]
|
27
|
-
dependency
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|