mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-29 14:36:04 +02:00
Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
61f12e078f | ||
|
|
e4172614e8 | ||
|
|
3fe8d6d6af | ||
|
|
a0fa610df3 |
+42
-11
@@ -38,16 +38,47 @@
|
|||||||
# due to malicious input as a consequence of CVE-2021-45444, which affects
|
# due to malicious input as a consequence of CVE-2021-45444, which affects
|
||||||
# zsh versions from 5.0.3 to 5.8.
|
# zsh versions from 5.0.3 to 5.8.
|
||||||
#
|
#
|
||||||
autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 0
|
# The patch is applied when VCS_INFO_formats is first called, since loading
|
||||||
|
# and patching it on every startup costs time in shells that never use
|
||||||
|
# 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`.
|
||||||
|
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
|
# We use $tmp here because it's already a local variable in VCS_INFO_formats
|
||||||
typeset 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
|
||||||
typeset 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
|
||||||
|
}
|
||||||
|
else
|
||||||
|
function VCS_INFO_formats {
|
||||||
|
local loaded_function="$(
|
||||||
|
unfunction VCS_INFO_formats 2>/dev/null
|
||||||
|
autoload -Uz +X VCS_INFO_formats 2>/dev/null || return 1
|
||||||
|
print -r -- "$functions[VCS_INFO_formats]"
|
||||||
|
)" || return 1
|
||||||
|
functions[VCS_INFO_formats]="$loaded_function"
|
||||||
|
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
|
||||||
|
|
||||||
|
VCS_INFO_formats "$@"
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
unset PATCH PATCH_ID
|
|
||||||
|
|||||||
+1
-17
@@ -100,23 +100,7 @@ done
|
|||||||
# Figure out the SHORT hostname
|
# Figure out the SHORT hostname
|
||||||
if [[ "$OSTYPE" = darwin* ]]; then
|
if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
# macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible.
|
# macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible.
|
||||||
# scutil costs a fork on every start, so remember its answer for a day
|
SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) || SHORT_HOST="${HOST/.*/}"
|
||||||
# (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))
|
|
||||||
if [[ -n "$__omz_host_cached" ]]; then
|
|
||||||
{ read -r __omz_host_key && read -r SHORT_HOST } < "$__omz_host_cache"
|
|
||||||
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
|
else
|
||||||
SHORT_HOST="${HOST/.*/}"
|
SHORT_HOST="${HOST/.*/}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user