pull upstream changes from gitstatus

pull/70/head
romkatv 6 years ago
parent 2d6a5f84bb
commit 79a783fb3c

@ -207,8 +207,6 @@ function gitstatus_start() {
emulate -L zsh emulate -L zsh
setopt err_return no_unset no_bg_nice setopt err_return no_unset no_bg_nice
[[ ${GITSTATUS_ENABLE_XTRACE:-0} != 1 ]] || setopt xtrace
local opt local opt
local -F timeout=5 local -F timeout=5
local -i max_dirty=-1 local -i max_dirty=-1
@ -218,7 +216,6 @@ function gitstatus_start() {
t) timeout=$OPTARG;; t) timeout=$OPTARG;;
m) max_dirty=$OPTARG;; m) max_dirty=$OPTARG;;
?) return 1;; ?) return 1;;
done) break;;
esac esac
done done
@ -228,16 +225,23 @@ function gitstatus_start() {
[[ -z ${(P)${:-GITSTATUS_DAEMON_PID_${name}}:-} ]] || return 0 [[ -z ${(P)${:-GITSTATUS_DAEMON_PID_${name}}:-} ]] || return 0
local os && os=$(uname -s) && [[ -n $os ]] local xtrace_file lock_file req_fifo resp_fifo log_file
local arch && arch=$(uname -m) && [[ -n $arch ]] local -i stderr_fd=-1 lock_fd=-1 req_fd=-1 resp_fd=-1 daemon_pid=-1
local daemon && daemon=${GITSTATUS_DAEMON:-${${(%):-%x}:A:h}/bin/gitstatusd-${os:l}-${arch:l}} function gitstatus_start_impl() {
[[ -f $daemon ]] || { echo "file not found: $daemon" >&2 && return 1 } [[ ${GITSTATUS_ENABLE_LOGGING:-0} != 1 ]] || {
xtrace_file=$(mktemp "${TMPDIR:-/tmp}"/gitstatus.$$.xtrace.XXXXXXXXXX)
typeset -g GITSTATUS_XTRACE_${name}=$xtrace_file
exec {stderr_fd}>&2 2>$xtrace_file
setopt xtrace
}
local lock_file req_fifo resp_fifo log_file local os && os=$(uname -s) && [[ -n $os ]]
local -i lock_fd=-1 req_fd=-1 resp_fd=-1 daemon_pid=-1 local arch && arch=$(uname -m) && [[ -n $arch ]]
local daemon && daemon=${GITSTATUS_DAEMON:-${${(%):-%x}:A:h}/bin/gitstatusd-${os:l}-${arch:l}}
[[ -f $daemon ]] || { echo "file not found: $daemon" >&2 && return 1 }
function gitstatus_start_impl() {
lock_file=$(mktemp "${TMPDIR:-/tmp}"/gitstatus.$$.lock.XXXXXXXXXX) lock_file=$(mktemp "${TMPDIR:-/tmp}"/gitstatus.$$.lock.XXXXXXXXXX)
zsystem flock -f lock_fd $lock_file zsystem flock -f lock_fd $lock_file
@ -257,7 +261,7 @@ function gitstatus_start() {
zle -F $resp_fd _gitstatus_process_response_${name} zle -F $resp_fd _gitstatus_process_response_${name}
[[ ${GITSTATUS_ENABLE_LOGGING:-0} == 1 ]] && [[ ${GITSTATUS_ENABLE_LOGGING:-0} == 1 ]] &&
log_file=$(mktemp "${TMPDIR:-/tmp}"/gitstatus.$$.log.XXXXXXXXXX) || log_file=$(mktemp "${TMPDIR:-/tmp}"/gitstatus.$$.daemon-log.XXXXXXXXXX) ||
log_file=/dev/null log_file=/dev/null
typeset -g GITSTATUS_DAEMON_LOG_${name}=$log_file typeset -g GITSTATUS_DAEMON_LOG_${name}=$log_file
@ -295,6 +299,12 @@ function gitstatus_start() {
[[ $daemon_pid -gt 0 ]] && kill -- -$daemon_pid &>/dev/null [[ $daemon_pid -gt 0 ]] && kill -- -$daemon_pid &>/dev/null
} }
add-zsh-hook zshexit _gitstatus_cleanup_${ZSH_SUBSHELL}_${daemon_pid} add-zsh-hook zshexit _gitstatus_cleanup_${ZSH_SUBSHELL}_${daemon_pid}
[[ $stderr_fd == -1 ]] || {
unsetopt xtrace
exec 2>&$stderr_fd {stderr_fd}>&-
stderr_fd=-1
}
} }
gitstatus_start_impl && { gitstatus_start_impl && {
@ -304,13 +314,50 @@ function gitstatus_start() {
typeset -giH _GITSTATUS_CLIENT_PID_${name}=$$ typeset -giH _GITSTATUS_CLIENT_PID_${name}=$$
unset -f gitstatus_start_impl unset -f gitstatus_start_impl
} || { } || {
echo "gitstatus failed to initialize" >&2 || true unsetopt err_return
[[ $daemon_pid -gt 0 ]] && kill -- -$daemon_pid &>/dev/null || true [[ $daemon_pid -gt 0 ]] && kill -- -$daemon_pid &>/dev/null
[[ $lock_fd -ge 0 ]] && zsystem flock -u $lock_fd || true [[ $stderr_fd -ge 0 ]] && { exec 2>&$stderr_fd {stderr_fd}>&- }
[[ $req_fd -ge 0 ]] && exec {req_fd}>&- || true [[ $lock_fd -ge 0 ]] && zsystem flock -u $lock_fd
[[ $resp_fd -ge 0 ]] && { zle -F $resp_fd || true } && { exec {resp_fd}>&- || true} [[ $req_fd -ge 0 ]] && exec {req_fd}>&-
command rm -f $lock_file $req_fifo $resp_fifo || true [[ $resp_fd -ge 0 ]] && { zle -F $resp_fd; exec {resp_fd}>&- }
command rm -f $lock_file $req_fifo $resp_fifo
unset -f gitstatus_start_impl unset -f gitstatus_start_impl
>&2 print -P '[%F{red}ERROR%f]: gitstatus failed to initialize.'
>&2 echo -E ''
>&2 echo -E ' Your git prompt may disappear or become slow.'
if [[ -s $xtrace_file ]]; then
>&2 echo -E ''
>&2 echo -E " The content of ${(q-)xtrace_file} (gitstatus_start_impl xtrace):"
>&2 print -P '%F{yellow}'
>&2 awk '{print " " $0}' <$xtrace_file
>&2 print -P '%F{red} ^ this command failed%f'
fi
if [[ -s $log_file ]]; then
>&2 echo -E ''
>&2 echo -E " The content of ${(q-)log_file} (gitstatus daemon log):"
>&2 print -P '%F{yellow}'
>&2 awk '{print " " $0}' <$log_file
>&2 print -nP '%f'
fi
if [[ ${GITSTATUS_ENABLE_LOGGING:-0} == 1 ]]; then
>&2 echo -E ''
>&2 echo -E ' Your system information:'
>&2 print -P '%F{yellow}'
>&2 echo -E " zsh: $ZSH_VERSION"
>&2 echo -E " uname -a: $(uname -a)"
>&2 print -P '%f'
>&2 echo -E ' If you need help, open an issue and attach this whole error message to it:'
>&2 echo -E ''
>&2 print -P ' %F{green}https://github.com/romkatv/gitstatus/issues/new%f'
else
>&2 echo -E ''
>&2 echo -E ' Run the following command to retry with extra diagnostics:'
>&2 print -P '%F{green}'
>&2 echo -E " GITSTATUS_ENABLE_LOGGING=1 gitstatus_start ${(@q-)*}"
>&2 print -nP '%f'
fi
return 1 return 1
} }
} }

Loading…
Cancel
Save