Simplify brew cask doctor.

This commit is contained in:
Markus Reiter 2017-01-25 00:36:38 +01:00
parent 33fa80944e
commit 324988e7a5

View File

@ -2,23 +2,13 @@ module Hbc
class CLI class CLI
class Doctor < Base class Doctor < Base
def self.run def self.run
ohai "macOS Release:", render_with_none_as_error(MacOS.full_version) ohai "Homebrew-Cask Version:", Hbc.full_version
ohai "Hardware Architecture:", render_with_none_as_error("#{Hardware::CPU.type}-#{Hardware::CPU.bits}")
ohai "Ruby Version:", render_with_none_as_error("#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}")
ohai "Ruby Path:", render_with_none_as_error(RbConfig.ruby)
# TODO: consider removing most Homebrew constants from doctor output
ohai "Homebrew Version:", render_with_none_as_error(homebrew_version)
ohai "Homebrew Executable Path:", render_with_none_as_error(HOMEBREW_BREW_FILE)
ohai "Homebrew Cellar Path:", render_with_none_as_error(homebrew_cellar)
ohai "Homebrew Repository Path:", render_with_none_as_error(HOMEBREW_REPOSITORY)
ohai "Homebrew Origin:", render_with_none_as_error(homebrew_origin)
ohai "Homebrew-Cask Version:", render_with_none_as_error(Hbc.full_version)
ohai "Homebrew-Cask Install Location:", render_install_location ohai "Homebrew-Cask Install Location:", render_install_location
ohai "Homebrew-Cask Staging Location:", render_staging_location(Hbc.caskroom) ohai "Homebrew-Cask Staging Location:", render_staging_location(Hbc.caskroom)
ohai "Homebrew-Cask Cached Downloads:", render_cached_downloads ohai "Homebrew-Cask Cached Downloads:", render_cached_downloads
ohai "Homebrew-Cask Default Tap Path:", render_tap_paths(Hbc.default_tap.path) ohai "Homebrew-Cask Taps:"
ohai "Homebrew-Cask Alternate Cask Taps:", render_tap_paths(alt_taps) puts render_taps(Hbc.default_tap)
ohai "Homebrew-Cask Default Tap Cask Count:", render_with_none_as_error(default_cask_count) puts render_taps(*alt_taps)
ohai "Contents of $LOAD_PATH:", render_load_path($LOAD_PATH) ohai "Contents of $LOAD_PATH:", render_load_path($LOAD_PATH)
ohai "Contents of $RUBYLIB Environment Variable:", render_env_var("RUBYLIB") ohai "Contents of $RUBYLIB Environment Variable:", render_env_var("RUBYLIB")
ohai "Contents of $RUBYOPT Environment Variable:", render_env_var("RUBYOPT") ohai "Contents of $RUBYOPT Environment Variable:", render_env_var("RUBYOPT")
@ -33,69 +23,6 @@ module Hbc
ohai "Contents of Locale Environment Variables:", render_with_none(locale_variables) ohai "Contents of Locale Environment Variables:", render_with_none(locale_variables)
end end
def self.alt_taps
Tap.select { |t| t.cask_dir && t != Hbc.default_tap }
.map(&:path)
end
def self.default_cask_count
Hbc.default_tap.cask_files.count
rescue StandardError
"0 #{error_string "Error reading #{Hbc.default_tap.path}"}"
end
def self.homebrew_origin
homebrew_origin = notfound_string
begin
Dir.chdir(HOMEBREW_REPOSITORY) do
homebrew_origin = SystemCommand.run("/usr/bin/git",
args: %w[config --get remote.origin.url],
print_stderr: false).stdout.strip
end
if homebrew_origin !~ /\S/
homebrew_origin = "#{none_string} #{error_string}"
elsif homebrew_origin !~ %r{(mxcl|Homebrew)/(home)?brew(\.git)?\Z}
homebrew_origin.concat " #{error_string "warning: nonstandard origin"}"
end
rescue StandardError
homebrew_origin = error_string "Not Found - Error running git"
end
homebrew_origin
end
def self.homebrew_cellar
homebrew_constants("cellar")
end
def self.homebrew_version
homebrew_constants("version")
end
def self.homebrew_taps
Tap::TAP_DIRECTORY
end
def self.homebrew_constants(name)
@homebrew_constants ||= {}
return @homebrew_constants[name] if @homebrew_constants.key?(name)
@homebrew_constants[name] = notfound_string
begin
@homebrew_constants[name] = SystemCommand.run!(HOMEBREW_BREW_FILE,
args: ["--#{name}"],
print_stderr: false)
.stdout
.strip
if @homebrew_constants[name] !~ /\S/
@homebrew_constants[name] = "#{none_string} #{error_string}"
end
path = Pathname.new(@homebrew_constants[name])
@homebrew_constants[name] = path if path.exist?
rescue StandardError
@homebrew_constants[name] = error_string "Not Found - Error running brew"
end
@homebrew_constants[name]
end
def self.locale_variables def self.locale_variables
ENV.keys.grep(/^(?:LC_\S+|LANG|LANGUAGE)\Z/).collect { |v| %Q(#{v}="#{ENV[v]}") }.sort.join("\n") ENV.keys.grep(/^(?:LC_\S+|LANG|LANGUAGE)\Z/).collect { |v| %Q(#{v}="#{ENV[v]}") }.sort.join("\n")
end end
@ -108,10 +35,6 @@ module Hbc
/phinze/ /phinze/
end end
def self.notfound_string
Formatter.error("Not Found - Unknown Error")
end
def self.error_string(string = "Error") def self.error_string(string = "Error")
Formatter.error("(#{string})") Formatter.error("(#{string})")
end end
@ -121,20 +44,25 @@ module Hbc
none_string none_string
end end
def self.render_with_none_as_error(string) def self.alt_taps
return string if !string.nil? && string.respond_to?(:to_s) && !string.to_s.empty? Tap.select { |t| t.cask_dir && t != Hbc.default_tap }
"#{none_string} #{error_string}"
end end
def self.render_tap_paths(paths) def self.cask_count_for_tap(tap)
paths = [paths] unless paths.respond_to?(:each) count = tap.cask_files.count
paths.collect do |dir| "#{count} #{count == 1 ? "cask" : "casks"}"
if dir.nil? || dir.to_s.empty? rescue StandardError
"0 #{error_string "error reading #{tap.path}"}"
end
def self.render_taps(*taps)
taps.collect do |tap|
if tap.path.nil? || tap.path.to_s.empty?
none_string none_string
elsif dir.to_s.match(legacy_tap_pattern) elsif tap.path.to_s.match(legacy_tap_pattern)
dir.to_s.concat(" #{error_string "Warning: legacy tap path"}") tap.path.to_s.concat(" #{error_string "Warning: legacy tap path"}")
else else
dir.to_s "#{tap.path} (#{cask_count_for_tap(tap)})"
end end
end end
end end
@ -151,7 +79,7 @@ module Hbc
# where "doctor" is needed is precisely the situation where such # where "doctor" is needed is precisely the situation where such
# things are less dependable. # things are less dependable.
def self.render_install_location def self.render_install_location
locations = Dir.glob(Pathname.new(homebrew_cellar).join("brew-cask", "*")).reverse locations = Dir.glob(HOMEBREW_CELLAR.join("brew-cask", "*")).reverse
if locations.empty? if locations.empty?
none_string none_string
else else