Skip to content

Commit 82b2c9b

Browse files
Merge pull request #9402 from mlarraz/replace-molinillo-with-pubgrub
Replace Molinillo with PubGrub for dependency resolution
2 parents 97775a0 + 3d5dfa9 commit 82b2c9b

69 files changed

Lines changed: 3233 additions & 3056 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Manifest.txt

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -470,11 +470,11 @@ lib/rubygems/resolver/api_set/gem_parser.rb
470470
lib/rubygems/resolver/api_specification.rb
471471
lib/rubygems/resolver/best_set.rb
472472
lib/rubygems/resolver/composed_set.rb
473-
lib/rubygems/resolver/conflict.rb
474473
lib/rubygems/resolver/current_set.rb
475474
lib/rubygems/resolver/dependency_request.rb
476475
lib/rubygems/resolver/git_set.rb
477476
lib/rubygems/resolver/git_specification.rb
477+
lib/rubygems/resolver/incompatibility.rb
478478
lib/rubygems/resolver/index_set.rb
479479
lib/rubygems/resolver/index_specification.rb
480480
lib/rubygems/resolver/installed_specification.rb
@@ -487,7 +487,7 @@ lib/rubygems/resolver/set.rb
487487
lib/rubygems/resolver/source_set.rb
488488
lib/rubygems/resolver/spec_specification.rb
489489
lib/rubygems/resolver/specification.rb
490-
lib/rubygems/resolver/stats.rb
490+
lib/rubygems/resolver/strategy.rb
491491
lib/rubygems/resolver/vendor_set.rb
492492
lib/rubygems/resolver/vendor_specification.rb
493493
lib/rubygems/s3_uri_signer.rb
@@ -532,27 +532,6 @@ lib/rubygems/util/atomic_file_writer.rb
532532
lib/rubygems/util/licenses.rb
533533
lib/rubygems/validator.rb
534534
lib/rubygems/vendor/.document
535-
lib/rubygems/vendor/molinillo/LICENSE
536-
lib/rubygems/vendor/molinillo/lib/molinillo.rb
537-
lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb
538-
lib/rubygems/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb
539-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph.rb
540-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/action.rb
541-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
542-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
543-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
544-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
545-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
546-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
547-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
548-
lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
549-
lib/rubygems/vendor/molinillo/lib/molinillo/errors.rb
550-
lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb
551-
lib/rubygems/vendor/molinillo/lib/molinillo/modules/specification_provider.rb
552-
lib/rubygems/vendor/molinillo/lib/molinillo/modules/ui.rb
553-
lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb
554-
lib/rubygems/vendor/molinillo/lib/molinillo/resolver.rb
555-
lib/rubygems/vendor/molinillo/lib/molinillo/state.rb
556535
lib/rubygems/vendor/net-http/COPYING
557536
lib/rubygems/vendor/net-http/lib/net/http.rb
558537
lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb
@@ -577,6 +556,24 @@ lib/rubygems/vendor/optparse/lib/optparse/shellwords.rb
577556
lib/rubygems/vendor/optparse/lib/optparse/time.rb
578557
lib/rubygems/vendor/optparse/lib/optparse/uri.rb
579558
lib/rubygems/vendor/optparse/lib/optparse/version.rb
559+
lib/rubygems/vendor/pub_grub/LICENSE.txt
560+
lib/rubygems/vendor/pub_grub/lib/pub_grub.rb
561+
lib/rubygems/vendor/pub_grub/lib/pub_grub/assignment.rb
562+
lib/rubygems/vendor/pub_grub/lib/pub_grub/basic_package_source.rb
563+
lib/rubygems/vendor/pub_grub/lib/pub_grub/failure_writer.rb
564+
lib/rubygems/vendor/pub_grub/lib/pub_grub/incompatibility.rb
565+
lib/rubygems/vendor/pub_grub/lib/pub_grub/package.rb
566+
lib/rubygems/vendor/pub_grub/lib/pub_grub/partial_solution.rb
567+
lib/rubygems/vendor/pub_grub/lib/pub_grub/rubygems.rb
568+
lib/rubygems/vendor/pub_grub/lib/pub_grub/solve_failure.rb
569+
lib/rubygems/vendor/pub_grub/lib/pub_grub/static_package_source.rb
570+
lib/rubygems/vendor/pub_grub/lib/pub_grub/strategy.rb
571+
lib/rubygems/vendor/pub_grub/lib/pub_grub/term.rb
572+
lib/rubygems/vendor/pub_grub/lib/pub_grub/version.rb
573+
lib/rubygems/vendor/pub_grub/lib/pub_grub/version_constraint.rb
574+
lib/rubygems/vendor/pub_grub/lib/pub_grub/version_range.rb
575+
lib/rubygems/vendor/pub_grub/lib/pub_grub/version_solver.rb
576+
lib/rubygems/vendor/pub_grub/lib/pub_grub/version_union.rb
580577
lib/rubygems/vendor/resolv/COPYING
581578
lib/rubygems/vendor/resolv/lib/resolv.rb
582579
lib/rubygems/vendor/securerandom/COPYING
@@ -601,9 +598,9 @@ lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb
601598
lib/rubygems/vendor/uri/lib/uri/version.rb
602599
lib/rubygems/vendor/uri/lib/uri/ws.rb
603600
lib/rubygems/vendor/uri/lib/uri/wss.rb
604-
lib/rubygems/vendored_molinillo.rb
605601
lib/rubygems/vendored_net_http.rb
606602
lib/rubygems/vendored_optparse.rb
603+
lib/rubygems/vendored_pub_grub.rb
607604
lib/rubygems/vendored_securerandom.rb
608605
lib/rubygems/vendored_timeout.rb
609606
lib/rubygems/vendored_tsort.rb

lib/rubygems/commands/exec_command.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,9 @@ def install
173173
rescue Gem::InstallError => e
174174
alert_error "Error installing #{gem_name}:\n\t#{e.message}"
175175
terminate_interaction 1
176+
rescue Gem::DependencyResolutionError => e
177+
alert_error "Error installing #{gem_name}:\n\t#{e.message}"
178+
terminate_interaction 2
176179
rescue Gem::GemNotFoundException => e
177180
show_lookup_failure e.name, e.version, e.errors, false
178181

lib/rubygems/commands/install_command.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,9 @@ def install_gems # :nodoc:
224224
rescue Gem::InstallError => e
225225
alert_error "Error installing #{gem_name}:\n\t#{e.message}"
226226
exit_code |= 1
227+
rescue Gem::DependencyResolutionError => e
228+
alert_error "Error installing #{gem_name}:\n\t#{e.message}"
229+
exit_code |= 2
227230
rescue Gem::UnsatisfiableDependencyError => e
228231
show_lookup_failure e.name, e.version, e.errors, suppress_suggestions,
229232
"'#{gem_name}' (#{gem_version})"

lib/rubygems/exceptions.rb

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,24 @@ class Gem::DependencyError < Gem::Exception; end
3333
class Gem::DependencyRemovalException < Gem::Exception; end
3434

3535
##
36-
# Raised by Gem::Resolver when a Gem::Dependency::Conflict reaches the
37-
# toplevel. Indicates which dependencies were incompatible through #conflict
38-
# and #conflicting_dependencies
36+
# Raised by Gem::Resolver when dependency resolution fails.
3937

4038
class Gem::DependencyResolutionError < Gem::DependencyError
41-
attr_reader :conflict
42-
4339
def initialize(conflict)
44-
@conflict = conflict
45-
a, b = conflicting_dependencies
40+
@explanation = conflict.explanation
41+
super @explanation
42+
end
4643

47-
super "conflicting dependencies #{a} and #{b}\n#{@conflict.explanation}"
44+
def explanation
45+
@explanation
46+
end
47+
48+
def conflict
49+
nil
4850
end
4951

5052
def conflicting_dependencies
51-
@conflict.conflicting_dependencies
53+
[]
5254
end
5355
end
5456

@@ -126,40 +128,6 @@ def initialize(name, version, errors = nil)
126128

127129
Gem.deprecate_constant :SpecificGemNotFoundException
128130

129-
##
130-
# Raised by Gem::Resolver when dependencies conflict and create the
131-
# inability to find a valid possible spec for a request.
132-
133-
class Gem::ImpossibleDependenciesError < Gem::Exception
134-
attr_reader :conflicts
135-
attr_reader :request
136-
137-
def initialize(request, conflicts)
138-
@request = request
139-
@conflicts = conflicts
140-
141-
super build_message
142-
end
143-
144-
def build_message # :nodoc:
145-
requester = @request.requester
146-
requester = requester ? requester.spec.full_name : "The user"
147-
dependency = @request.dependency
148-
149-
message = "#{requester} requires #{dependency} but it conflicted:\n".dup
150-
151-
@conflicts.each do |_, conflict|
152-
message << conflict.explanation
153-
end
154-
155-
message
156-
end
157-
158-
def dependency
159-
@request.dependency
160-
end
161-
end
162-
163131
class Gem::InstallError < Gem::Exception; end
164132

165133
class Gem::RuntimeRequirementNotMetError < Gem::InstallError

lib/rubygems/request_set.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,6 @@ def install_from_gemdeps(options, &block)
234234
sorted_requests.each do |spec|
235235
puts " #{spec.full_name}"
236236
end
237-
238-
if Gem.configuration.really_verbose
239-
@resolver.stats.display
240-
end
241237
else
242238
installed = install options, &block
243239

0 commit comments

Comments
 (0)