From e7852049a58ea5379dd8d88e97be89579b46a55b Mon Sep 17 00:00:00 2001 From: Robby Russell Date: Fri, 18 Sep 2026 02:27:06 -0700 Subject: [PATCH] perf(init): cache the LocalHostName lookup (#14066) --- oh-my-zsh.sh | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index e3ef6a821..268037cd3 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -100,7 +100,28 @@ done # Figure out the SHORT hostname if [[ "$OSTYPE" = darwin* ]]; then # macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible. - SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) || SHORT_HOST="${HOST/.*/}" + # scutil costs a fork on every start, so remember its answer for a day + # (like lib/grep.zsh) and re-check sooner if $HOST changes. + __omz_host_cache="$ZSH_CACHE_DIR/localhostname" + __omz_host_cached=("$__omz_host_cache"(Nm-1)) + __omz_host_key= + SHORT_HOST= + if [[ -n "$__omz_host_cached" ]]; then + if ! { read -r __omz_host_key && read -r SHORT_HOST } < "$__omz_host_cache"; then + __omz_host_key= + SHORT_HOST= + fi + fi + if [[ "$__omz_host_key" != "$HOST" || -z "$SHORT_HOST" ]]; then + # only cache what scutil actually answered, so a transient failure + # doesn't pin the fallback name for a day + if SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) && [[ -n "$SHORT_HOST" ]]; then + [[ ! -w "$ZSH_CACHE_DIR" ]] || print -rl -- "$HOST" "$SHORT_HOST" >| "$__omz_host_cache" + else + SHORT_HOST="${HOST/.*/}" + fi + fi + unset __omz_host_cache __omz_host_cached __omz_host_key else SHORT_HOST="${HOST/.*/}" fi