From 3fe8d6d6af265bc6a1acefd461093fde9c3c4bf7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 6 Sep 2026 15:54:56 +0000 Subject: [PATCH] fix(vcs_info): preserve preloaded VCS_INFO_formats when patching Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com> --- lib/vcs_info.zsh | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/lib/vcs_info.zsh b/lib/vcs_info.zsh index 90beaac1b..f4c62a081 100644 --- a/lib/vcs_info.zsh +++ b/lib/vcs_info.zsh @@ -43,20 +43,37 @@ # 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 # vcs_info's own `autoload -Uz VCS_INFO_formats`. -function VCS_INFO_formats { - unfunction VCS_INFO_formats - autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 1 +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 + # 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 + autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 1 - VCS_INFO_formats "$@" -} + # 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 + + VCS_INFO_formats "$@" + } +fi