diff options
author | Tim Moore <tmoore@incrementalism.net> | 2015-02-22 15:39:58 +1100 |
---|---|---|
committer | Tim Moore <tmoore@incrementalism.net> | 2015-02-22 15:39:58 +1100 |
commit | d0a21a0563c9fb7061ac98a30277157bc9160116 (patch) | |
tree | 4f55ae19fee2533de1518532289b92ef0b7df3ad | |
parent | 90fc4ca5de032adf4de849034d44be0418addb34 (diff) | |
download | bundler-d0a21a0563c9fb7061ac98a30277157bc9160116.tar.gz |
Fix source unlocking with multiple sources.
Fixes #3414 & #3417.
-rw-r--r-- | lib/bundler/definition.rb | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 59f8a69d77..4c15866577 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -406,11 +406,18 @@ module Bundler if locked unlocking = @locked_specs.any? do |locked_spec| - locked_spec.source != locked + locked_spec.source.class == locked.class && locked_spec.source != locked end end - !locked || unlocking || source.specs != locked.specs + !locked || unlocking || dependencies_for_source_changed?(locked) || source.specs != locked.specs + end + + def dependencies_for_source_changed?(source) + deps_for_source = @dependencies.select { |s| s.source == source } + locked_deps_for_source = @locked_deps.select { |s| s.source == source } + + deps_for_source != locked_deps_for_source end # Get all locals and override their matching sources. |