From 2b363b904c3244a4d67f4db02cfa3d965100f079 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 13 May 2024 23:53:44 +0100 Subject: [PATCH] brew.sh: cache HOMEBREW_VERSION on disk. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a (relatively, for this Bash script) expensive operation that can be trivially cached so: let's do so. Speedup on my machine: ``` $ hyperfine "brew --version" "HOMEBREW_VERSION_CACHE=1 brew --version" Benchmark 1: brew --version Time (mean ± σ): 173.4 ms ± 5.1 ms [User: 28.7 ms, System: 67.0 ms] Range (min … max): 167.3 ms … 182.9 ms 15 runs Benchmark 2: HOMEBREW_VERSION_CACHE=1 brew --version Time (mean ± σ): 145.9 ms ± 4.0 ms [User: 22.4 ms, System: 33.9 ms] Range (min … max): 140.0 ms … 154.5 ms 17 runs Summary HOMEBREW_VERSION_CACHE=1 brew --version ran 1.19 ± 0.05 times faster than brew --version ``` Co-authored-by: Bo Anderson --- Library/Homebrew/brew.sh | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh index abe2ed6bf6..a3e2f76291 100644 --- a/Library/Homebrew/brew.sh +++ b/Library/Homebrew/brew.sh @@ -495,7 +495,27 @@ setup_git() { setup_curl setup_git -HOMEBREW_VERSION="$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" describe --tags --dirty --abbrev=7 2>/dev/null)" +GIT_DESCRIBE_CACHE="${HOMEBREW_REPOSITORY}/.git/describe-cache" +GIT_REVISION=$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" rev-parse HEAD 2>/dev/null) +if [[ -n "${GIT_REVISION}" ]] +then + GIT_DESCRIBE_CACHE_FILE="${GIT_DESCRIBE_CACHE}/${GIT_REVISION}" + if [[ -f "${GIT_DESCRIBE_CACHE_FILE}" ]] + then + HOMEBREW_VERSION="$(cat "${GIT_DESCRIBE_CACHE_FILE}")" + else + rm -rf "${GIT_DESCRIBE_CACHE}" + HOMEBREW_VERSION="$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" describe --tags --dirty --abbrev=7 2>/dev/null)" + mkdir -p "${GIT_DESCRIBE_CACHE}" + echo "${HOMEBREW_VERSION}" >"${GIT_DESCRIBE_CACHE_FILE}" + fi + unset GIT_DESCRIBE_CACHE_FILE +else + rm -rf "${GIT_DESCRIBE_CACHE}" +fi +unset GIT_REVISION +unset GIT_DESCRIBE_CACHE + HOMEBREW_USER_AGENT_VERSION="${HOMEBREW_VERSION}" if [[ -z "${HOMEBREW_VERSION}" ]] then