summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrey Baker <greysteil@gmail.com>2017-09-09 12:30:14 +0100
committerGrey Baker <greysteil@gmail.com>2017-09-09 12:59:57 +0100
commit3a42475d26a21a11fec2e8411762a6af6549c82f (patch)
tree973f21bfa5ce90ebf12af3ac83e2f07a2e3de90d
parentf42dd8724b188fd7c09d9995735e83793f35792e (diff)
downloadbundler-3a42475d26a21a11fec2e8411762a6af6549c82f.tar.gz
Consider prerelease versions last if in Gemfile as non-prerelease
-rw-r--r--lib/bundler/resolver.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index cc87bcb0cb..fcd893fa77 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -42,6 +42,7 @@ module Bundler
end
def start(requirements)
+ @initial_requirements = requirements
verify_gemfile_dependencies_are_found!(requirements)
dg = @resolver.resolve(requirements, @base_dg)
dg.map(&:payload).
@@ -100,6 +101,15 @@ module Bundler
search = @search_for[dependency] ||= begin
index = index_for(dependency)
results = index.search(dependency, @base[dependency.name])
+
+ inital_requirement = @initial_requirements.find {|req| req.name == dependency.name }
+ if inital_requirement && !inital_requirement.requirement.prerelease?
+ # Move prereleases to the beginning of the list, so they're considered
+ # last during resolution.
+ pre, results = results.partition {|spec| spec.version.prerelease? }
+ results = pre + results
+ end
+
if vertex = @base_dg.vertex_named(dependency.name)
locked_requirement = vertex.payload.requirement
end