From a2e5ece12620dd1e8f20fb6dfa89a0af498bfdb0 Mon Sep 17 00:00:00 2001 From: Max Howell Date: Tue, 14 Aug 2012 11:21:33 -0400 Subject: `brew doctor -D` (diagnostic-dump) -D is now the switch for diagnostic-dumps. Let it be so. Shows how long each doctor method takes in a sorted table at end. I used this to move the two slowest methods to the end of the doctor run so that as much useful information can be shown as quickly as possible. Also now possible to specify on command line which tests should be run. --- Library/Homebrew/cmd/doctor.rb | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/doctor.rb b/Library/Homebrew/cmd/doctor.rb index 41f952b1e..6f7d29343 100644 --- a/Library/Homebrew/cmd/doctor.rb +++ b/Library/Homebrew/cmd/doctor.rb @@ -706,7 +706,7 @@ def __check_linked_brew f return links_found end -def check_for_linked_kegonly_brews +def check_for_linked_keg_only_brews require 'formula' warnings = Hash.new @@ -933,7 +933,16 @@ module Homebrew extend self def doctor checks = Checks.new - checks.methods.select{ |method| method =~ /^check_/ }.sort.each do |method| + inject_dump_stats(checks) if ARGV.switch? 'D' + + methods = if ARGV.named.empty? + # put slowest methods last + checks.methods.sort << "check_for_linked_keg_only_brews" << "check_for_outdated_homebrew" + else + ARGV.named + end.select{ |method| method =~ /^check_/ }.uniq + + methods.each do |method| out = checks.send(method) unless out.nil? or out.empty? lines = out.to_s.split('\n') @@ -945,4 +954,20 @@ module Homebrew extend self puts "Your system is raring to brew." unless Homebrew.failed? end + + def inject_dump_stats checks + class << checks + alias_method :oldsend, :send + def send method + time = Time.now + oldsend(method) + ensure + $times[method] = Time.now - time + end + end + $times = {} + at_exit { + puts $times.sort_by{|k, v| v }.map{|k, v| "#{k}: #{v}"} + } + end end -- cgit v1.2.3