summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrismo <chrismo@clabs.org>2016-06-16 14:57:26 -0500
committerchrismo <chrismo@clabs.org>2016-07-08 19:35:57 -0500
commit80e1b176102c33bd0e89f4c28a9c7889980527df (patch)
tree60f332d5c4b62e7a55ecf65174b103096e08ceda
parent100c3bbdf937e1efd423556957a79de84af11f37 (diff)
downloadbundler-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.rb6
-rw-r--r--spec/resolver/basic_spec.rb17
-rw-r--r--spec/support/indexes.rb17
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)