summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bundler/gem_version_promoter.rb13
-rw-r--r--lib/bundler/index.rb14
-rw-r--r--lib/bundler/resolver.rb2
3 files changed, 8 insertions, 21 deletions
diff --git a/lib/bundler/gem_version_promoter.rb b/lib/bundler/gem_version_promoter.rb
index 1ae41e2928..ee2c38a6ec 100644
--- a/lib/bundler/gem_version_promoter.rb
+++ b/lib/bundler/gem_version_promoter.rb
@@ -116,15 +116,14 @@ module Bundler
end
def sort_dep_specs(spec_groups, locked_spec)
- return spec_groups unless locked_spec
- @gem_name = locked_spec.name
- @locked_version = locked_spec.version
+ @locked_version = locked_spec&.version
+ @gem_name = locked_spec&.name
result = spec_groups.sort do |a, b|
@a_ver = a.version
@b_ver = b.version
- unless @prerelease_specified[@gem_name]
+ unless @gem_name && @prerelease_specified[@gem_name]
a_pre = @a_ver.prerelease?
b_pre = @b_ver.prerelease?
@@ -148,7 +147,7 @@ module Bundler
end
def either_version_older_than_locked
- @a_ver < @locked_version || @b_ver < @locked_version
+ @locked_version && (@a_ver < @locked_version || @b_ver < @locked_version)
end
def segments_do_not_match(level)
@@ -157,7 +156,7 @@ module Bundler
end
def unlocking_gem?
- unlock_gems.empty? || unlock_gems.include?(@gem_name)
+ unlock_gems.empty? || (@gem_name && unlock_gems.include?(@gem_name))
end
# Specific version moves can't always reliably be done during sorting
@@ -165,7 +164,7 @@ module Bundler
def post_sort(result)
# default :major behavior in Bundler does not do this
return result if major?
- if unlocking_gem?
+ if unlocking_gem? || @locked_version.nil?
result
else
move_version_to_end(result, @locked_version)
diff --git a/lib/bundler/index.rb b/lib/bundler/index.rb
index c639936cb0..9c48c9032b 100644
--- a/lib/bundler/index.rb
+++ b/lib/bundler/index.rb
@@ -57,16 +57,12 @@ module Bundler
# Search this index's specs, and any source indexes that this index knows
# about, returning all of the results.
def search(query)
- sort_specs(unsorted_search(query))
- end
-
- def unsorted_search(query)
results = local_search(query)
seen = results.map(&:full_name).uniq unless @sources.empty?
@sources.each do |source|
- source.unsorted_search(query).each do |spec|
+ source.search(query).each do |spec|
next if seen.include?(spec.full_name)
seen << spec.full_name
@@ -76,14 +72,6 @@ module Bundler
results
end
- protected :unsorted_search
-
- def sort_specs(specs)
- specs.sort_by do |s|
- platform_string = s.platform.to_s
- [s.version, platform_string == RUBY ? NULL : platform_string]
- end
- end
def local_search(query)
case query
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index fcb3812c5a..86b7177624 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -284,7 +284,7 @@ module Bundler
end
def gem_not_found_message(name, requirement, source, extra_message = "")
- specs = source.specs.search(name)
+ specs = source.specs.search(name).sort_by {|s| [s.version, s.platform.to_s] }
matching_part = name
requirement_label = SharedHelpers.pretty_dependency(requirement)
cache_message = begin