diagnostic: speed up check for outdated Homebrew

Determine the age of the local `HEAD` first and only if it is older than
24 hours proceed with the much more expensive `git ls-remote` to check
if there are any new upstream commits (there usually will be).

This keeps the overall logic unaltered, but significantly speeds up the
check for users that have recently updated (still slow for all others).

Closes Homebrew/homebrew#48499.

Signed-off-by: Martin Afanasjew <martin@afanasjew.de>
This commit is contained in:
Martin Afanasjew 2016-01-27 00:46:31 +01:00
parent 2e2d2ab6ab
commit 4cc8d3ed8b

View File

@ -1226,28 +1226,27 @@ module Homebrew
def check_for_outdated_homebrew
return unless Utils.git_available?
HOMEBREW_REPOSITORY.cd do
if File.directory? ".git"
timestamp = if File.directory?("#{HOMEBREW_REPOSITORY}/.git")
HOMEBREW_REPOSITORY.cd { `git log -1 --format="%ct" HEAD`.to_i }
else
HOMEBREW_LIBRARY.mtime.to_i
end
return if Time.now.to_i - timestamp <= 60 * 60 * 24 # 24 hours
if File.directory?("#{HOMEBREW_REPOSITORY}/.git")
HOMEBREW_REPOSITORY.cd do
local = `git rev-parse -q --verify refs/remotes/origin/master`.chomp
remote = /^([a-f0-9]{40})/.match(`git ls-remote origin refs/heads/master 2>/dev/null`)
if remote.nil? || local == remote[0]
return
end
return if remote.nil? || local == remote[0]
end
end
timestamp = if File.directory? ".git"
`git log -1 --format="%ct" HEAD`.to_i
else
HOMEBREW_LIBRARY.mtime.to_i
end
if Time.now.to_i - timestamp > 60 * 60 * 24 then <<-EOS.undent
<<-EOS.undent
Your Homebrew is outdated.
You haven't updated for at least 24 hours. This is a long time in brewland!
To update Homebrew, run `brew update`.
EOS
end
end
EOS
end
def check_for_unlinked_but_not_keg_only