From 2d133ba1a6968b280276ddcb994a1c03e7d7e171 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Wed, 16 Aug 2023 12:56:23 +0100 Subject: [PATCH] cmd/update-report: improve tap/untap behaviour. - unify core tapping/untapping behaviour (so we can never tap and then immediately untap) - automatically untap homebrew-core or homebrew-cask if it's old, on the default branch and it doesn't seem to be needed - if we think it's unneeded but it's too new: output a message instead Co-authored-by: Carlo Cabrera <30379873+carlocab@users.noreply.github.com> --- Library/Homebrew/cmd/update-report.rb | 59 +++++++++++++++------------ 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index 2f06c84c2d..64b4a16b8f 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -97,10 +97,9 @@ module Homebrew analytics_message donation_message install_from_api_message - untap_message end - install_core_tap_if_necessary + tap_or_untap_core_taps_if_necessary updated = false new_tag = nil @@ -300,16 +299,40 @@ module Homebrew Utils.popen_read("git", "-C", HOMEBREW_REPOSITORY, "rev-parse", "--short", revision).chomp end - def install_core_tap_if_necessary + def tap_or_untap_core_taps_if_necessary return if ENV["HOMEBREW_UPDATE_TEST"] - return unless Homebrew::EnvConfig.no_install_from_api? - return if Homebrew::EnvConfig.automatically_set_no_install_from_api? - return if CoreTap.instance.installed? - CoreTap.ensure_installed! - revision = CoreTap.instance.git_head - ENV["HOMEBREW_UPDATE_BEFORE_HOMEBREW_HOMEBREW_CORE"] = revision - ENV["HOMEBREW_UPDATE_AFTER_HOMEBREW_HOMEBREW_CORE"] = revision + if Homebrew::EnvConfig.no_install_from_api? + return if Homebrew::EnvConfig.automatically_set_no_install_from_api? + return if CoreTap.instance.installed? + + CoreTap.ensure_installed! + revision = CoreTap.instance.git_head + ENV["HOMEBREW_UPDATE_BEFORE_HOMEBREW_HOMEBREW_CORE"] = revision + ENV["HOMEBREW_UPDATE_AFTER_HOMEBREW_HOMEBREW_CORE"] = revision + else + return if Homebrew::EnvConfig.developer? || ENV["HOMEBREW_DEV_CMD_RUN"] + return if ENV["HOMEBREW_GITHUB_HOSTED_RUNNER"] || ENV["GITHUB_ACTIONS_HOMEBREW_SELF_HOSTED"] + return if (HOMEBREW_PREFIX/".homebrewdocker").exist? + + tap_output_header_printed = T.let(false, T::Boolean) + [CoreTap.instance, CoreCaskTap.instance].each do |tap| + next unless tap.installed? + + if tap.git_branch == "master" && + (Date.parse(tap.git_repo.last_commit_date) <= Date.today.prev_month) + ohai "#{tap.name} is old and unneeded, untapping to save space..." + tap.uninstall + else + unless tap_output_header_printed + puts "Installing from the API is now the default behaviour!" + puts "You can save space and time by running:" + tap_output_header_printed = true + end + puts " brew untap #{tap.name}" + end + end + end end def link_completions_manpages_and_docs(repository = HOMEBREW_REPOSITORY) @@ -391,22 +414,6 @@ module Homebrew # Consider the message possibly missed if not a TTY. Settings.write "installfromapimessage", true if $stdout.tty? end - - def untap_message - return if Homebrew::EnvConfig.no_install_from_api? - return if Homebrew::EnvConfig.developer? || ENV["HOMEBREW_DEV_CMD_RUN"] - return if ENV["HOMEBREW_GITHUB_HOSTED_RUNNER"] || ENV["GITHUB_ACTIONS_HOMEBREW_SELF_HOSTED"] - return if (HOMEBREW_PREFIX/".homebrewdocker").exist? - - core_tap = CoreTap.instance - cask_tap = CoreCaskTap.instance - return if !core_tap.installed? && !cask_tap.installed? - - puts "Installing from the API is now the default behaviour!" - puts "You can save space and time by running:" - puts " brew untap #{core_tap.name}" if core_tap.installed? - puts " brew untap #{cask_tap.name}" if cask_tap.installed? - end end require "extend/os/cmd/update-report"