aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rubygems/resolver/requirement_list.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/resolver/requirement_list.rb')
-rw-r--r--lib/rubygems/resolver/requirement_list.rb25
1 files changed, 22 insertions, 3 deletions
diff --git a/lib/rubygems/resolver/requirement_list.rb b/lib/rubygems/resolver/requirement_list.rb
index fe1d77afc3..a6bfaab307 100644
--- a/lib/rubygems/resolver/requirement_list.rb
+++ b/lib/rubygems/resolver/requirement_list.rb
@@ -13,10 +13,12 @@ class Gem::Resolver::RequirementList
# Creates a new RequirementList.
def initialize
+ @exact = []
@list = []
end
def initialize_copy other # :nodoc:
+ @exact = @exact.dup
@list = @list.dup
end
@@ -24,7 +26,11 @@ class Gem::Resolver::RequirementList
# Adds Resolver::DependencyRequest +req+ to this requirements list.
def add(req)
- @list.push req
+ if req.requirement.exact?
+ @exact.push req
+ else
+ @list.push req
+ end
req
end
@@ -34,22 +40,34 @@ class Gem::Resolver::RequirementList
def each # :nodoc:
return enum_for __method__ unless block_given?
+ @exact.each do |requirement|
+ yield requirement
+ end
+
@list.each do |requirement|
yield requirement
end
end
##
+ # How many elements are in the list
+
+ def size
+ @exact.size + @list.size
+ end
+
+ ##
# Is the list empty?
def empty?
- @list.empty?
+ @exact.empty? && @list.empty?
end
##
# Remove the oldest DependencyRequest from the list.
def remove
+ return @exact.shift unless @exact.empty?
@list.shift
end
@@ -57,6 +75,7 @@ class Gem::Resolver::RequirementList
# Returns the oldest five entries from the list.
def next5
- @list[0,5]
+ x = @exact[0,5]
+ x + @list[0,5 - x.size]
end
end