From b1cbe47e458f26ca218bb7c518412dea903b4d39 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Thu, 14 Mar 2024 16:41:30 +0000 Subject: [PATCH] cmd/update-reset: use stable tag. Currently we always reset Homebrew/brew onto the latest `master`. Instead, let's correctly use the latest tag when appropriate. --- Library/Homebrew/cmd/update-reset.sh | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cmd/update-reset.sh b/Library/Homebrew/cmd/update-reset.sh index f87d623b25..be92b1e37b 100644 --- a/Library/Homebrew/cmd/update-reset.sh +++ b/Library/Homebrew/cmd/update-reset.sh @@ -75,9 +75,21 @@ homebrew-update-reset() { echo ohai "Resetting ${DIR}..." - head="$(git -C "${DIR}" symbolic-ref refs/remotes/origin/HEAD)" - head="${head#refs/remotes/origin/}" - git -C "${DIR}" checkout --force -B "${head}" origin/HEAD + # HOMEBREW_* variables here may all set by bin/brew or the user + # shellcheck disable=SC2154 + if [[ "${DIR}" == "${HOMEBREW_REPOSITORY}" && + (-n "${HOMEBREW_UPDATE_TO_TAG}" || + (-z "${HOMEBREW_DEVELOPER}" && -z "${HOMEBREW_DEV_CMD_RUN}")) ]] + then + local latest_git_tag + latest_git_tag="$(git -C "${DIR}" tag --list --sort="-version:refname" | head -n1)" + + git -C "${DIR}" checkout --force -B stable "refs/tags/${latest_git_tag}" + else + head="$(git -C "${DIR}" symbolic-ref refs/remotes/origin/HEAD)" + head="${head#refs/remotes/origin/}" + git -C "${DIR}" checkout --force -B "${head}" origin/HEAD + fi echo done }