diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-01-24 02:38:57 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-01-24 02:38:57 +0000 |
commit | 5d438215365e1a5dc3da7172a511a335aa58a5b4 (patch) | |
tree | 72ac80942856be3a5370dea6458f3b6dfce671e4 /lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb | |
parent | 6219b68fb53a77a221f615d47dde83fea0a7e7c8 (diff) |
Update Rubygems 2.6.10
* https://github.com/rubygems/rubygems/commit/2ee5bf9fd3bd7649d3e244bc40107ff32070ef47
* https://github.com/rubygems/rubygems/commit/be510dd4097e65c6a256a6e173d6b724a3a96472
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb')
-rw-r--r-- | lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb index 54a6c3fc17..ea497ddcaf 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb @@ -194,18 +194,20 @@ module Gem::Resolver::Molinillo def state_index_for_unwind current_requirement = requirement existing_requirement = requirement_for_existing_name(name) - until current_requirement.nil? - current_state = find_state_for(current_requirement) - return states.index(current_state) if state_any?(current_state) - current_requirement = parent_of(current_requirement) + index = -1 + [current_requirement, existing_requirement].each do |r| + until r.nil? + current_state = find_state_for(r) + if state_any?(current_state) + current_index = states.index(current_state) + index = current_index if current_index > index + break + end + r = parent_of(r) + end end - until existing_requirement.nil? - existing_state = find_state_for(existing_requirement) - return states.index(existing_state) if state_any?(existing_state) - existing_requirement = parent_of(existing_requirement) - end - -1 + index end # @return [Object] the requirement that led to `requirement` being added @@ -364,19 +366,17 @@ module Gem::Resolver::Molinillo if matching_deps.empty? && !succ.root? && succ.predecessors.to_a == [vertex] debug(depth) { "Removing orphaned spec #{succ.name} after swapping #{name}" } succ.requirements.each { |r| @parent_of.delete(r) } - activated.detach_vertex_named(succ.name) - - all_successor_names = succ.recursive_successors.map(&:name) - requirements.delete_if do |requirement| - requirement_name = name_for(requirement) - (requirement_name == succ.name) || all_successor_names.include?(requirement_name) + removed_names = activated.detach_vertex_named(succ.name).map(&:name) + requirements.delete_if do |r| + # the only removed vertices are those with no other requirements, + # so it's safe to delete only based upon name here + removed_names.include?(name_for(r)) end elsif !matching_deps.include?(outgoing_edge.requirement) activated.delete_edge(outgoing_edge) requirements.delete(outgoing_edge.requirement) end - matching_deps.delete(outgoing_edge.requirement) end end |