Update upgrade/outdated methods for head versions

Introduce `--fetch-HEAD` option. Without this option upgrade and
outdated never fetch latest upstream commit to detect if HEAD is
outdated -- tabs are used instead. However, if option is passed,
we fetch commit from upstream, which is more time consuming,
but we can be sure that version is up-to-date or outdated.
This commit is contained in:
Vlad Shablinsky 2016-07-22 12:47:47 +03:00 committed by Xu Cheng
parent 04cb161ddb
commit 9754dbada8
No known key found for this signature in database
GPG Key ID: C2A3860FA0B459CE
3 changed files with 34 additions and 7 deletions

View File

@ -32,10 +32,19 @@ module Homebrew
def print_outdated(formulae) def print_outdated(formulae)
verbose = ($stdout.tty? || ARGV.verbose?) && !ARGV.flag?("--quiet") verbose = ($stdout.tty? || ARGV.verbose?) && !ARGV.flag?("--quiet")
fetch_head = ARGV.fetch_head?
formulae.select(&:outdated?).each do |f| outdated_formulae = formulae.select { |f| f.outdated?(:fetch_head => fetch_head) }
outdated_formulae.each do |f|
if verbose if verbose
puts "#{f.full_name} (#{f.outdated_versions*", "} < #{f.pkg_version})" outdated_versions = f.outdated_versions(:fetch_head => fetch_head)
current_version = if f.head? && outdated_versions.any? { |v| v.to_s == f.pkg_version.to_s }
"latest HEAD"
else
f.pkg_version.to_s
end
puts "#{f.full_name} (#{outdated_versions.join(", ")}) < #{current_version}"
else else
puts f.full_name puts f.full_name
end end
@ -44,11 +53,20 @@ module Homebrew
def print_outdated_json(formulae) def print_outdated_json(formulae)
json = [] json = []
outdated = formulae.select(&:outdated?).each do |f| fetch_head = ARGV.fetch_head?
outdated_formulae = formulae.select { |f| f.outdated?(:fetch_head => fetch_head) }
outdated = outdated_formulae.each do |f|
outdated_versions = f.outdated_versions(:fetch_head => fetch_head)
current_version = if f.head? && outdated_versions.any? { |v| v.to_s == f.pkg_version.to_s }
"HEAD"
else
f.pkg_version.to_s
end
json << { :name => f.full_name, json << { :name => f.full_name,
:installed_versions => f.outdated_versions.collect(&:to_s), :installed_versions => outdated_versions.collect(&:to_s),
:current_version => f.pkg_version.to_s } :current_version => current_version }
end end
puts Utils::JSON.dump(json) puts Utils::JSON.dump(json)

View File

@ -19,10 +19,15 @@ module Homebrew
Homebrew.perform_preinstall_checks Homebrew.perform_preinstall_checks
if ARGV.named.empty? if ARGV.named.empty?
outdated = Formula.installed.select(&:outdated?) outdated = Formula.installed.select do |f|
f.outdated?(:fetch_head => ARGV.fetch_head?)
end
exit 0 if outdated.empty? exit 0 if outdated.empty?
else else
outdated = ARGV.resolved_formulae.select(&:outdated?) outdated = ARGV.resolved_formulae.select do |f|
f.outdated?(:fetch_head => ARGV.fetch_head?)
end
(ARGV.resolved_formulae - outdated).each do |f| (ARGV.resolved_formulae - outdated).each do |f|
versions = f.installed_kegs.map { |keg| keg.version } versions = f.installed_kegs.map { |keg| keg.version }

View File

@ -223,6 +223,10 @@ module HomebrewArgvExtension
include? "--force-bottle" include? "--force-bottle"
end end
def fetch_head?
include? "--fetch-HEAD"
end
# eg. `foo -ns -i --bar` has three switches, n, s and i # eg. `foo -ns -i --bar` has three switches, n, s and i
def switch?(char) def switch?(char)
return false if char.length > 1 return false if char.length > 1