mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-28 14:06:12 +02:00
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:
co-authored by
robbyrussell
parent
a0fa610df3
commit
3fe8d6d6af
+32
-15
@@ -43,20 +43,37 @@
|
|||||||
# 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
|
||||||
unfunction VCS_INFO_formats
|
() {
|
||||||
autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 1
|
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
|
# 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]//\%/%%}"'
|
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
|
# Unique string to avoid reapplying the patch if this code gets called twice
|
||||||
local PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
|
local PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
|
||||||
# Only patch the VCS_INFO_formats function if not already patched
|
# Only patch the VCS_INFO_formats function if not already patched
|
||||||
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
|
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
|
||||||
regexp-replace 'functions[VCS_INFO_formats]' \
|
regexp-replace 'functions[VCS_INFO_formats]' \
|
||||||
"VCS_INFO_hook 'post-backend'" \
|
"VCS_INFO_hook 'post-backend'" \
|
||||||
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
|
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
|
||||||
fi
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user