82 lines
2.5 KiB
Bash
82 lines
2.5 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
eval "$_z4h_opt"
|
|
-z4h-check-core-params || return
|
|
|
|
if (( ARGC )); then
|
|
print -Pru2 -- '%F{3}z4h%f: unexpected %F{1}update%f argument'
|
|
return '_z4h_err()'
|
|
fi
|
|
|
|
if (( _z4h_dangerous_root )); then
|
|
print -Pru2 -- "%F{3}z4h%f: refusing to %Bupdate%b as %F{1}root%f"
|
|
return 1
|
|
fi
|
|
|
|
local old=$Z4H.old.$$
|
|
local new=$Z4H.new.$$
|
|
|
|
{
|
|
zf_rm -rf -- $old $new || return
|
|
zf_mkdir -p -- $new || return
|
|
print -n >$new/.updating || return
|
|
|
|
Z4H_UPDATING=$Z4H Z4H=$new </dev/null >/dev/null $_z4h_exe -ic '
|
|
(( $? )) && "exit" "1"
|
|
"builtin" "emulate" "zsh" "-o" "no_aliases"
|
|
[[ $Z4H == '${(q)new}' ]] || exit 0
|
|
print -n >$Z4H/tmp/update-successful' || return
|
|
|
|
if [[ ! -e $new/tmp/update-successful ]]; then
|
|
local home=~
|
|
local zdotdir=${${${(q)ZDOTDIR}/#${(q)home}/'~'}//\%/%%}
|
|
local z4h=${${${(q)Z4H}/#${(q)home}/'~'}//\%/%%}
|
|
print -Pru2 -- '%F{3}z4h%f: %B$Z4H%b %F{1}does not propagate%f through %U.zshrc%u'
|
|
print -Pru2 -- ''
|
|
print -Pru2 -- 'Change %U'$zdotdir'/.zshrc%u to keep %BZ4H%b intact if already set.'
|
|
print -Pru2 -- ''
|
|
print -Pru2 -- 'For example:'
|
|
print -Pru2 -- ''
|
|
print -Pru2 -- ' %F{2}:%f %F{3}"${Z4H:=${XDG_CACHE_HOME:-$HOME/.cache}/zsh4humans}"%f'
|
|
print -Pru2 -- ''
|
|
print -Pru2 -- 'Note: The leading colon (%F{2}:%f) is necessary.'
|
|
return 1
|
|
fi
|
|
|
|
zf_rm -- $new/tmp/update-successful || return
|
|
zf_rm -- $new/.updating || return
|
|
-z4h-mv $Z4H $old 2>/dev/null || zf_rm -rf -- $Z4H || return
|
|
if [[ -e $Z4H ]]; then
|
|
local home=~
|
|
local z4h=${${${(q)Z4H}/#${(q)home}/'~'}//\%/%%}
|
|
print -Pru2 -- '%F{3}z4h%f: %F{1}cannot delete %U'$z4h'%u%f'
|
|
print -Pru2 -- ''
|
|
print -Pru2 -- 'This might help:'
|
|
print -Pru2 -- ''
|
|
print -Pru2 -- ' %F{2}%Ucommand%u %Usudo%u rm%f -rf -- %U'$z4h'%u && %U%F{2}exec%u zsh%f'
|
|
print -Pru2 -- ''
|
|
print -Pru2 -- '%F{3}z4h%f: attempting to recover'
|
|
if [[ ! -e $Z4H/stickycache ]]; then
|
|
command cp -r -- $new/stickycache $Z4H/stickycache || true
|
|
fi
|
|
if [[ -o zle ]]; then
|
|
exec -- $_z4h_exe -i || return
|
|
else
|
|
exec -- $_z4h_exe -i --no-zle || return
|
|
fi
|
|
fi
|
|
-z4h-mv $new $Z4H || return
|
|
} always {
|
|
if (( $? )); then
|
|
-z4h-error-command update
|
|
fi
|
|
zf_rm -rf -- $old $new || return
|
|
}
|
|
|
|
print -Pru2 -- "%F{3}z4h%f: %Bupdate successful%b"
|
|
print -Pru2 -- "%F{3}z4h%f: restarting %F{2}zsh%f"
|
|
if [[ -o zle ]]; then
|
|
exec -- $_z4h_exe -i || return
|
|
else
|
|
exec -- $_z4h_exe -i --no-zle || return
|
|
fi
|