From 378f7f8f72cc9fa0940b1331f3fb114313371bbd Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 19 Aug 2024 15:29:58 +0100 Subject: [PATCH 1/2] brew.sh: further improve git describe cache. - Use a safe fallback in case git rev-parse fails, e.g. if this is not considered a safe git directory. For hopefully obvious reasons: be super careful and strict with the inputs we'll accept here. - Better handle more permission errors when reading or writing to/from the git describe cache. We don't care about these errors because they are likely a result of a multiuser configuration where Homebrew is run as several different users and this is just a (small) performance improvement. --- Library/Homebrew/brew.sh | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh index 959d86149e..b804df2b62 100644 --- a/Library/Homebrew/brew.sh +++ b/Library/Homebrew/brew.sh @@ -439,24 +439,48 @@ setup_git GIT_DESCRIBE_CACHE="${HOMEBREW_REPOSITORY}/.git/describe-cache" GIT_REVISION=$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" rev-parse HEAD 2>/dev/null) + +# safe fallback in case git rev-parse fails e.g. if this is not considered a safe git directory +if [[ -z "${GIT_REVISION}" ]] +then + GIT_HEAD="$(cat "${HOMEBREW_REPOSITORY}/.git/HEAD" 2>/dev/null)" + if [[ "${GIT_HEAD}" == "ref: refs/heads/master" ]] + then + GIT_REVISION="$(cat "${HOMEBREW_REPOSITORY}/.git/refs/heads/master" 2>/dev/null)" + elif [[ "${GIT_HEAD}" == "ref: refs/heads/stable" ]] + then + GIT_REVISION="$(cat "${HOMEBREW_REPOSITORY}/.git/refs/heads/stable" 2>/dev/null)" + fi + unset GIT_HEAD +fi + if [[ -n "${GIT_REVISION}" ]] then GIT_DESCRIBE_CACHE_FILE="${GIT_DESCRIBE_CACHE}/${GIT_REVISION}" - if [[ -f "${GIT_DESCRIBE_CACHE_FILE}" ]] + if [[ -r "${GIT_DESCRIBE_CACHE_FILE}" ]] + then + GIT_DESCRIBE_CACHE_HOMEBREW_VERSION="$(cat "${GIT_DESCRIBE_CACHE_FILE}")" + if [[ -n "${GIT_DESCRIBE_CACHE_HOMEBREW_VERSION}" && "${GIT_DESCRIBE_CACHE_HOMEBREW_VERSION}" != *"-dirty" ]] + then + HOMEBREW_VERSION="${GIT_DESCRIBE_CACHE_HOMEBREW_VERSION}" + fi + unset GIT_DESCRIBE_CACHE_HOMEBREW_VERSION + fi + + if [[ -z "${HOMEBREW_VERSION}" ]] then - HOMEBREW_VERSION="$(cat "${GIT_DESCRIBE_CACHE_FILE}")" - else HOMEBREW_VERSION="$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" describe --tags --dirty --abbrev=7 2>/dev/null)" - # Don't output any permissions errors here. - # The user may not have write permissions to the cache but we don't care - # because it's an optional performance improvement. + # Don't output any permissions errors here. The user may not have write + # permissions to the cache but we don't care because it's an optional + # performance improvement. rm -rf "${GIT_DESCRIBE_CACHE}" 2>/dev/null mkdir -p "${GIT_DESCRIBE_CACHE}" 2>/dev/null - echo "${HOMEBREW_VERSION}" >"${GIT_DESCRIBE_CACHE_FILE}" 2>/dev/null + echo "${HOMEBREW_VERSION}" | tee "${GIT_DESCRIBE_CACHE_FILE}" &>/dev/null fi unset GIT_DESCRIBE_CACHE_FILE else - rm -rf "${GIT_DESCRIBE_CACHE}" + # Don't care about permission errors here either. + rm -rf "${GIT_DESCRIBE_CACHE}" 2>/dev/null fi unset GIT_REVISION unset GIT_DESCRIBE_CACHE From 4bf0a7f20fa844f439d6c3b3bcc7639c661281c1 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 19 Aug 2024 16:01:27 +0100 Subject: [PATCH 2/2] brew.sh: bump minimum version. We know we're definitely on at least 4.3.0 now, so let's update this. --- Library/Homebrew/brew.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh index b804df2b62..314f683033 100644 --- a/Library/Homebrew/brew.sh +++ b/Library/Homebrew/brew.sh @@ -488,7 +488,7 @@ unset GIT_DESCRIBE_CACHE HOMEBREW_USER_AGENT_VERSION="${HOMEBREW_VERSION}" if [[ -z "${HOMEBREW_VERSION}" ]] then - HOMEBREW_VERSION=">=4.1.0 (shallow or no git repository)" + HOMEBREW_VERSION=">=4.3.0 (shallow or no git repository)" HOMEBREW_USER_AGENT_VERSION="4.X.Y" fi