diff options
author | chrismo <chrismo@clabs.org> | 2016-06-22 00:04:56 -0500 |
---|---|---|
committer | chrismo <chrismo@clabs.org> | 2016-07-08 19:35:57 -0500 |
commit | 861eb2b00b99516f4c43f4be5380bf00e2039416 (patch) | |
tree | ff640f14f2762a53a5494c963aa3f9eba90c0747 /lib/bundler/gem_version_promoter.rb | |
parent | 8cbe425e39ec0d710309993956dc37fe8abbb733 (diff) | |
download | bundler-861eb2b00b99516f4c43f4be5380bf00e2039416.tar.gz |
Fix up major support in GVP.
If GVP handles the default :major case, it now passes all the specs, but
that's a lot of existing functionality to hand off to it at this stage,
so I kept in the conditional to just roll with existing results if
:major.
Got rid of a couple of superfluous begin/end I'd included to make
RubyMine auto-format the code in a way that made Rubocop happy.
Diffstat (limited to 'lib/bundler/gem_version_promoter.rb')
-rw-r--r-- | lib/bundler/gem_version_promoter.rb | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/lib/bundler/gem_version_promoter.rb b/lib/bundler/gem_version_promoter.rb index 50848ca580..57fc9f4c12 100644 --- a/lib/bundler/gem_version_promoter.rb +++ b/lib/bundler/gem_version_promoter.rb @@ -7,8 +7,7 @@ module Bundler # MODO: docs def initialize(locked_specs = SpecSet.new([]), unlock_gems = []) - @level_default = :major - @level = @level_default + @level = :major @strict = false @locked_specs = locked_specs @unlock_gems = unlock_gems @@ -17,11 +16,9 @@ module Bundler # MODO: docs def level=(value) - v = begin - case value - when String, Symbol - value.to_sym - end + v = case value + when String, Symbol + value.to_sym end raise ArgumentError, "Unexpected level #{v}. Must be :major, :minor or :patch" unless [:major, :minor, :patch].include?(v) @@ -45,8 +42,8 @@ module Bundler sort_dep_specs(dep_specs, locked_spec) end.tap do |specs| if ENV["DEBUG_RESOLVER"] - Bundler.ui.debug before_result - Bundler.ui.debug " after sort_versions: #{debug_format_result(dep, specs).inspect}" + STDERR.puts before_result + STDERR.puts " after sort_versions: #{debug_format_result(dep, specs).inspect}" end end end @@ -54,15 +51,23 @@ module Bundler result.dup # not ideal, but elsewhere in bundler the resulting array is occasionally emptied, corrupting the cache. end + def major? + level == :major + end + + def minor? + level == :minor + end + private def filter_dep_specs(specs, locked_spec) res = specs.select do |spec_group| - if locked_spec && !(level == :major) + if locked_spec && !major? gsv = spec_group.version lsv = locked_spec.version - must_match = level == :minor ? [0] : [0, 1] + must_match = minor? ? [0] : [0, 1] matches = must_match.map {|idx| gsv.segments[idx] == lsv.segments[idx] } (matches.uniq == [true]) ? (gsv >= lsv) : false @@ -79,24 +84,27 @@ module Bundler gem_name = locked_spec.name locked_version = locked_spec.version - filtered = specs.select {|s| s.version >= locked_version } + specs = specs.select {|s| s.version >= locked_version } unless major? - filtered.sort do |a, b| + specs.sort do |a, b| a_ver = a.version b_ver = b.version case - when level == :major + when major? a_ver <=> b_ver 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 !minor? && (a_ver.segments[1] != b_ver.segments[1]) b_ver <=> a_ver else a_ver <=> b_ver end end.tap do |result| - unless unlocking_gem?(gem_name) - move_version_to_end(specs, locked_version, result) + # default :major behavior in Bundler does not do this + unless major? + unless unlocking_gem?(gem_name) + move_version_to_end(specs, locked_version, result) + end end end end |