diff options
Diffstat (limited to 'lib/rubygems/bundler_version_finder.rb')
-rw-r--r-- | lib/rubygems/bundler_version_finder.rb | 60 |
1 files changed, 14 insertions, 46 deletions
diff --git a/lib/rubygems/bundler_version_finder.rb b/lib/rubygems/bundler_version_finder.rb index 9ce0a2378e..dd2fd77418 100644 --- a/lib/rubygems/bundler_version_finder.rb +++ b/lib/rubygems/bundler_version_finder.rb @@ -2,48 +2,18 @@ module Gem::BundlerVersionFinder def self.bundler_version - version, _ = bundler_version_with_reason + v = ENV["BUNDLER_VERSION"] - return unless version + v ||= bundle_update_bundler_version + return if v == true - Gem::Version.new(version) - end - - def self.bundler_version_with_reason - if v = ENV["BUNDLER_VERSION"] - return [v, "`$BUNDLER_VERSION`"] - end - if v = bundle_update_bundler_version - return if v == true - return [v, "`bundle update --bundler`"] - end - v, lockfile = lockfile_version - if v - return [v, "your #{lockfile}"] - end - end + v ||= lockfile_version + return unless v - def self.missing_version_message - return unless vr = bundler_version_with_reason - <<-EOS -Could not find 'bundler' (#{vr.first}) required by #{vr.last}. -To update to the latest version installed on your system, run `bundle update --bundler`. -To install the missing version, run `gem install bundler:#{vr.first}` - EOS + Gem::Version.new(v) end - def self.compatible?(spec) - return true unless spec.name == "bundler".freeze - return true unless bundler_version = self.bundler_version - - spec.version.segments.first == bundler_version.segments.first - end - - def self.filter!(specs) - return unless bundler_version = self.bundler_version - - specs.reject! {|spec| spec.version.segments.first != bundler_version.segments.first } - + def self.prioritize!(specs) exact_match_index = specs.find_index {|spec| spec.version == bundler_version } return unless exact_match_index @@ -51,7 +21,7 @@ To install the missing version, run `gem install bundler:#{vr.first}` end def self.bundle_update_bundler_version - return unless File.basename($0) == "bundle".freeze + return unless File.basename($0) == "bundle" return unless "update".start_with?(ARGV.first || " ") bundler_version = nil update_index = nil @@ -68,23 +38,21 @@ To install the missing version, run `gem install bundler:#{vr.first}` private_class_method :bundle_update_bundler_version def self.lockfile_version - return unless lockfile = lockfile_contents - lockfile, contents = lockfile - lockfile ||= "lockfile" + return unless contents = lockfile_contents regexp = /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/ return unless contents =~ regexp - [$1, lockfile] + $1 end private_class_method :lockfile_version def self.lockfile_contents gemfile = ENV["BUNDLE_GEMFILE"] - gemfile = nil if gemfile && gemfile.empty? + gemfile = nil if gemfile&.empty? unless gemfile begin Gem::Util.traverse_parents(Dir.pwd) do |directory| - next unless gemfile = Gem::GEM_DEP_FILES.find {|f| File.file?(f.tap(&Gem::UNTAINT)) } + next unless gemfile = Gem::GEM_DEP_FILES.find {|f| File.file?(f) } gemfile = File.join directory, gemfile break @@ -99,11 +67,11 @@ To install the missing version, run `gem install bundler:#{vr.first}` lockfile = case gemfile when "gems.rb" then "gems.locked" else "#{gemfile}.lock" - end.dup.tap(&Gem::UNTAINT) + end return unless File.file?(lockfile) - [lockfile, File.read(lockfile)] + File.read(lockfile) end private_class_method :lockfile_contents end |