diff options
author | chrismo <chrismo@clabs.org> | 2016-06-16 14:57:26 -0500 |
---|---|---|
committer | chrismo <chrismo@clabs.org> | 2016-07-08 19:35:57 -0500 |
commit | 80e1b176102c33bd0e89f4c28a9c7889980527df (patch) | |
tree | 60f332d5c4b62e7a55ecf65174b103096e08ceda | |
parent | 100c3bbdf937e1efd423556957a79de84af11f37 (diff) | |
download | bundler-80e1b176102c33bd0e89f4c28a9c7889980527df.tar.gz |
First resolver spec and bug fix.
I stared at that code 2 or 3 times before seeing the obvious bug. Sigh.
Anyway - needed to get these resolver specs going sooner or later. Both
the first new resolver spec is passing as is the first update_spec spec
(plus the pre-existing ones).
-rw-r--r-- | lib/bundler/resolver.rb | 6 | ||||
-rw-r--r-- | spec/resolver/basic_spec.rb | 17 | ||||
-rw-r--r-- | spec/support/indexes.rb | 17 |
3 files changed, 30 insertions, 10 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 08d4fd04eb..8d3ea75760 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -407,10 +407,10 @@ module Bundler (@strict ? filter_dep_specs(dep_specs, locked_spec) : - sort_dep_specs(dep_specs, locked_spec)).tap do |res| + sort_dep_specs(dep_specs, locked_spec)).tap do |specs| if ENV['DEBUG_PATCH_RESOLVER'] # MODO: proper debug flag check and proper debug output STDERR.puts super_result - STDERR.puts "after search_for: #{debug_format_result(dep, res).inspect}" + STDERR.puts "after search_for: #{debug_format_result(dep, specs).inspect}" end end end @@ -460,7 +460,7 @@ module Bundler case when a_ver.segments[0] != b_ver.segments[0] b_ver <=> a_ver - when !@level == :minor && (a_ver.segments[1] != b_ver.segments[1]) + when !(@level == :minor) && (a_ver.segments[1] != b_ver.segments[1]) b_ver <=> a_ver when @minimal && !unlocking_gem?(gem_name) b_ver <=> a_ver diff --git a/spec/resolver/basic_spec.rb b/spec/resolver/basic_spec.rb index cb5bc45597..c35b0ea81a 100644 --- a/spec/resolver/basic_spec.rb +++ b/spec/resolver/basic_spec.rb @@ -100,8 +100,19 @@ describe "Resolving" do deps << Bundler::DepProxy.new(d, "ruby") end - got = Bundler::Resolver.resolve(deps, @index, {}, [], Bundler::RubyVersion.new("1.8.7", nil, nil, nil)) - got = got.map(&:full_name).sort - expect(got).to eq(%w(foo-1.0.0 bar-1.0.0).sort) + should_resolve_and_include %w(foo-1.0.0 bar-1.0.0), [{}, [], Bundler::RubyVersion.new("1.8.7", nil, nil, nil)] + end + + context 'conservative' do + context 'patch' do + it 'resolves single gem with no dependencies' do + @index = build_index do + gem "foo", %w(1.0.0 1.0.1 1.0.2 1.1.0 2.0.0) + end + dep 'foo' + + should_consv_resolve_and_include :patch, locked('foo', '1.0.0'), %w(foo-1.0.2) + end + end end end diff --git a/spec/support/indexes.rb b/spec/support/indexes.rb index acace96886..cfd7f4b5fe 100644 --- a/spec/support/indexes.rb +++ b/spec/support/indexes.rb @@ -13,7 +13,7 @@ module Spec alias_method :platforms, :platform - def resolve + def resolve(args=[]) @platforms ||= ["ruby"] deps = [] @deps.each do |d| @@ -21,7 +21,7 @@ module Spec deps << Bundler::DepProxy.new(d, p) end end - Bundler::Resolver.resolve(deps, @index) + Bundler::Resolver.resolve(deps, @index, *args) end def should_resolve_as(specs) @@ -30,8 +30,8 @@ module Spec expect(got).to eq(specs.sort) end - def should_resolve_and_include(specs) - got = resolve + def should_resolve_and_include(specs, args=[]) + got = resolve(args) got = got.map(&:full_name).sort specs.each do |s| expect(got).to include(s) @@ -49,6 +49,15 @@ module Spec build_spec(*args, &blk).first end + def locked(name, versions) + Bundler::SpecSet.new(build_spec(name, Array(versions))) + end + + def should_consv_resolve_and_include(level, locked, specs) + searcher = Bundler::Resolver::UpdateOptions.new(locked).tap { |s| s.level = level } + should_resolve_and_include specs, [{}, [], nil, searcher] + end + def an_awesome_index build_index do gem "rack", %w(0.8 0.9 0.9.1 0.9.2 1.0 1.1) |