Port Homebrew::Cmd::Doctor
This commit is contained in:
		
							parent
							
								
									67fd065e1d
								
							
						
					
					
						commit
						f83ba58f8d
					
				@ -1,80 +1,80 @@
 | 
			
		||||
# typed: true
 | 
			
		||||
# typed: strict
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "abstract_command"
 | 
			
		||||
require "diagnostic"
 | 
			
		||||
require "cli/parser"
 | 
			
		||||
require "cask/caskroom"
 | 
			
		||||
 | 
			
		||||
module Homebrew
 | 
			
		||||
  sig { returns(CLI::Parser) }
 | 
			
		||||
  def self.doctor_args
 | 
			
		||||
    Homebrew::CLI::Parser.new do
 | 
			
		||||
      description <<~EOS
 | 
			
		||||
        Check your system for potential problems. Will exit with a non-zero status
 | 
			
		||||
        if any potential problems are found.
 | 
			
		||||
  module Cmd
 | 
			
		||||
    class Doctor < AbstractCommand
 | 
			
		||||
      cmd_args do
 | 
			
		||||
        description <<~EOS
 | 
			
		||||
          Check your system for potential problems. Will exit with a non-zero status
 | 
			
		||||
          if any potential problems are found.
 | 
			
		||||
 | 
			
		||||
        Please note that these warnings are just used to help the Homebrew maintainers
 | 
			
		||||
        with debugging if you file an issue. If everything you use Homebrew for
 | 
			
		||||
        is working fine: please don't worry or file an issue; just ignore this.
 | 
			
		||||
      EOS
 | 
			
		||||
      switch "--list-checks",
 | 
			
		||||
             description: "List all audit methods, which can be run individually " \
 | 
			
		||||
                          "if provided as arguments."
 | 
			
		||||
      switch "-D", "--audit-debug",
 | 
			
		||||
             description: "Enable debugging and profiling of audit methods."
 | 
			
		||||
 | 
			
		||||
      named_args :diagnostic_check
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def self.doctor
 | 
			
		||||
    args = doctor_args.parse
 | 
			
		||||
 | 
			
		||||
    inject_dump_stats!(Diagnostic::Checks, /^check_*/) if args.audit_debug?
 | 
			
		||||
 | 
			
		||||
    checks = Diagnostic::Checks.new(verbose: args.verbose?)
 | 
			
		||||
 | 
			
		||||
    if args.list_checks?
 | 
			
		||||
      puts checks.all
 | 
			
		||||
      return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if args.no_named?
 | 
			
		||||
      slow_checks = %w[
 | 
			
		||||
        check_for_broken_symlinks
 | 
			
		||||
        check_missing_deps
 | 
			
		||||
      ]
 | 
			
		||||
      methods = (checks.all - slow_checks) + slow_checks
 | 
			
		||||
      methods -= checks.cask_checks unless Cask::Caskroom.any_casks_installed?
 | 
			
		||||
    else
 | 
			
		||||
      methods = args.named
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    first_warning = T.let(true, T::Boolean)
 | 
			
		||||
    methods.each do |method|
 | 
			
		||||
      $stderr.puts Formatter.headline("Checking #{method}", color: :magenta) if args.debug?
 | 
			
		||||
      unless checks.respond_to?(method)
 | 
			
		||||
        ofail "No check available by the name: #{method}"
 | 
			
		||||
        next
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      out = checks.send(method)
 | 
			
		||||
      next if out.blank?
 | 
			
		||||
 | 
			
		||||
      if first_warning
 | 
			
		||||
        $stderr.puts <<~EOS
 | 
			
		||||
          #{Tty.bold}Please note that these warnings are just used to help the Homebrew maintainers
 | 
			
		||||
          with debugging if you file an issue. If everything you use Homebrew for is
 | 
			
		||||
          working fine: please don't worry or file an issue; just ignore this. Thanks!#{Tty.reset}
 | 
			
		||||
          Please note that these warnings are just used to help the Homebrew maintainers
 | 
			
		||||
          with debugging if you file an issue. If everything you use Homebrew for
 | 
			
		||||
          is working fine: please don't worry or file an issue; just ignore this.
 | 
			
		||||
        EOS
 | 
			
		||||
        switch "--list-checks",
 | 
			
		||||
               description: "List all audit methods, which can be run individually " \
 | 
			
		||||
                            "if provided as arguments."
 | 
			
		||||
        switch "-D", "--audit-debug",
 | 
			
		||||
               description: "Enable debugging and profiling of audit methods."
 | 
			
		||||
 | 
			
		||||
        named_args :diagnostic_check
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      $stderr.puts
 | 
			
		||||
      opoo out
 | 
			
		||||
      Homebrew.failed = true
 | 
			
		||||
      first_warning = false
 | 
			
		||||
    end
 | 
			
		||||
      sig { override.void }
 | 
			
		||||
      def run
 | 
			
		||||
        Homebrew.inject_dump_stats!(Diagnostic::Checks, /^check_*/) if args.audit_debug?
 | 
			
		||||
 | 
			
		||||
    puts "Your system is ready to brew." if !Homebrew.failed? && !args.quiet?
 | 
			
		||||
        checks = Diagnostic::Checks.new(verbose: args.verbose?)
 | 
			
		||||
 | 
			
		||||
        if args.list_checks?
 | 
			
		||||
          puts checks.all
 | 
			
		||||
          return
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        if args.no_named?
 | 
			
		||||
          slow_checks = %w[
 | 
			
		||||
            check_for_broken_symlinks
 | 
			
		||||
            check_missing_deps
 | 
			
		||||
          ]
 | 
			
		||||
          methods = (checks.all - slow_checks) + slow_checks
 | 
			
		||||
          methods -= checks.cask_checks unless Cask::Caskroom.any_casks_installed?
 | 
			
		||||
        else
 | 
			
		||||
          methods = args.named
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        first_warning = T.let(true, T::Boolean)
 | 
			
		||||
        methods.each do |method|
 | 
			
		||||
          $stderr.puts Formatter.headline("Checking #{method}", color: :magenta) if args.debug?
 | 
			
		||||
          unless checks.respond_to?(method)
 | 
			
		||||
            ofail "No check available by the name: #{method}"
 | 
			
		||||
            next
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          out = checks.send(method)
 | 
			
		||||
          next if out.blank?
 | 
			
		||||
 | 
			
		||||
          if first_warning
 | 
			
		||||
            $stderr.puts <<~EOS
 | 
			
		||||
              #{Tty.bold}Please note that these warnings are just used to help the Homebrew maintainers
 | 
			
		||||
              with debugging if you file an issue. If everything you use Homebrew for is
 | 
			
		||||
              working fine: please don't worry or file an issue; just ignore this. Thanks!#{Tty.reset}
 | 
			
		||||
            EOS
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          $stderr.puts
 | 
			
		||||
          opoo out
 | 
			
		||||
          Homebrew.failed = true
 | 
			
		||||
          first_warning = false
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        puts "Your system is ready to brew." if !Homebrew.failed? && !args.quiet?
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,9 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "cmd/doctor"
 | 
			
		||||
require "cmd/shared_examples/args_parse"
 | 
			
		||||
 | 
			
		||||
RSpec.describe "brew doctor" do
 | 
			
		||||
RSpec.describe Homebrew::Cmd::Doctor do
 | 
			
		||||
  it_behaves_like "parseable arguments"
 | 
			
		||||
 | 
			
		||||
  specify "check_integration_test", :integration_test do
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user