diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2017-02-17 17:55:28 -0600 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2017-02-17 17:55:28 -0600 |
commit | dd50f29ec80cdcbdf86ada0a60d66e5338b5aca9 (patch) | |
tree | 75d20d44223123f818cc36ac6f45789bb1f63680 | |
parent | 1e1530463d69d3967ab24076de98120be3db8431 (diff) | |
download | bundler-seg-resolver-sorting.tar.gz |
[Resolver] Improve sorting of deps with 0 or 1 possibilityseg-resolver-sorting
-rw-r--r-- | lib/bundler/resolver.rb | 9 | ||||
-rw-r--r-- | spec/install/bundler_spec.rb | 7 |
2 files changed, 10 insertions, 6 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 98d5e7227f..b8d044e6ef 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -329,6 +329,12 @@ module Bundler private + # returns an integer \in (-\infty, 0] + # a number closer to 0 means the dependency is less constraining + # + # dependencies w/ 0 or 1 possibilities (ignoring version requirements) + # are given very negative values, so they _always_ sort first, + # before dependencies that are unconstrained def amount_constrained(dependency) @amount_constrained ||= {} @amount_constrained[dependency.name] ||= begin @@ -336,8 +342,9 @@ module Bundler dependency.requirement.satisfied_by?(base.first.version) ? 0 : 1 else all = index_for(dependency).search(dependency.name).size + if all <= 1 - all + all - 1_000_000 else search = search_for(dependency).size search - all diff --git a/spec/install/bundler_spec.rb b/spec/install/bundler_spec.rb index 2b16fafa38..c1ce57e60e 100644 --- a/spec/install/bundler_spec.rb +++ b/spec/install/bundler_spec.rb @@ -44,17 +44,14 @@ RSpec.describe "bundle install" do In Gemfile: bundler (= 0.9.2) - rails (= 3.0) was resolved to 3.0, which depends on - bundler (>= 0.9.0.pre) - Current Bundler version: bundler (#{Bundler::VERSION}) This Gemfile requires a different version of Bundler. Perhaps you need to update Bundler by running `gem install bundler`? - Could not find gem 'bundler (= 0.9.2)', which is required by gem 'rails (= 3.0)', in any of the sources. + Could not find gem 'bundler (= 0.9.2)' in any of the sources E - expect(out).to include(nice_error) + expect(out).to eq(nice_error) end it "works for gems with multiple versions in its dependencies" do |