Permalink
Browse files

`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.
  • Loading branch information...
mxcl committed Aug 14, 2012
1 parent 0a45d96 commit a2e5ece12620dd1e8f20fb6dfa89a0af498bfdb0
Showing with 27 additions and 2 deletions.
  1. +27 −2 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 @@ def doctor
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

0 comments on commit a2e5ece

Please sign in to comment.