brew.sh: cache HOMEBREW_VERSION on disk.

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 <mail@boanderson.me>
This commit is contained in:
Mike McQuaid 2024-05-13 23:53:44 +01:00
parent 8378cc825d
commit 2b363b904c
No known key found for this signature in database

View File

@ -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