fix(vcs_info): preserve preloaded VCS_INFO_formats when patching

Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-09-06 15:54:56 +00:00
committed by GitHub
co-authored by robbyrussell
parent a0fa610df3
commit 3fe8d6d6af
+19 -2
View File
@@ -43,7 +43,23 @@
# vcs_info. `autoload` doesn't replace an already defined function, so this # vcs_info. `autoload` doesn't replace an already defined function, so this
# wrapper survives a later `autoload -Uz vcs_info` in a theme or .zshrc, and # wrapper survives a later `autoload -Uz vcs_info` in a theme or .zshrc, and
# vcs_info's own `autoload -Uz VCS_INFO_formats`. # vcs_info's own `autoload -Uz VCS_INFO_formats`.
function VCS_INFO_formats { if (( $+functions[VCS_INFO_formats] )); then
() {
autoload -Uz +X regexp-replace 2>/dev/null || return 1
# We use $tmp here because it's already a local variable in VCS_INFO_formats
local PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"'
# Unique string to avoid reapplying the patch if this code gets called twice
local PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
# Only patch the VCS_INFO_formats function if not already patched
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
regexp-replace 'functions[VCS_INFO_formats]' \
"VCS_INFO_hook 'post-backend'" \
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
fi
}
else
function VCS_INFO_formats {
unfunction VCS_INFO_formats unfunction VCS_INFO_formats
autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 1 autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 1
@@ -59,4 +75,5 @@ function VCS_INFO_formats {
fi fi
VCS_INFO_formats "$@" VCS_INFO_formats "$@"
} }
fi