diff --git a/Library/Homebrew/diagnostic.rb b/Library/Homebrew/diagnostic.rb index 93d6ade63b..18c5466983 100644 --- a/Library/Homebrew/diagnostic.rb +++ b/Library/Homebrew/diagnostic.rb @@ -147,6 +147,27 @@ module Homebrew end end + def broken_tap_msg(tap) + <<~EOS + #{tap.full_name} was not tapped properly. + To fix: + rm -rf "#{tap.path}" + brew tap #{tap.name} + EOS + end + + def broken_tap(tap) + return unless Utils::Git.available? + return unless HOMEBREW_REPOSITORY.git? + + return broken_tap_msg(tap) if tap.remote.blank? + + tap_head = tap.git_head + return broken_tap_msg(tap) if tap_head.blank? + + return broken_tap_msg(tap) if tap_head == HOMEBREW_REPOSITORY.git_head + end + def check_for_installed_developer_tools return if DevelopmentTools.installed? @@ -558,15 +579,16 @@ module Homebrew examine_git_origin(HOMEBREW_REPOSITORY, Homebrew::EnvConfig.brew_git_remote) end - def check_coretap_git_origin - examine_git_origin(CoreTap.instance.path, Homebrew::EnvConfig.core_git_remote) + def check_coretap_integrity + coretap = CoreTap.instance + broken_tap(coretap) || examine_git_origin(coretap.path, Homebrew::EnvConfig.core_git_remote) end - def check_casktap_git_origin + def check_casktap_integrity default_cask_tap = Tap.default_cask_tap return unless default_cask_tap.installed? - examine_git_origin(default_cask_tap.path, default_cask_tap.remote) + broken_tap(default_cask_tap) || examine_git_origin(default_cask_tap.path, default_cask_tap.remote) end sig { returns(T.nilable(String)) }