aboutsummaryrefslogtreecommitdiff
path: root/gitstatus.plugin.sh
diff options
context:
space:
mode:
authorRoman Perepelitsa <roman.perepelitsa@gmail.com>2020-11-25 13:14:38 +0300
committerRoman Perepelitsa <roman.perepelitsa@gmail.com>2020-11-25 13:14:38 +0300
commitfb89173a4257e0cfe3bfc772bc0cdbccd61e3be0 (patch)
treed18554885df53f92642c04320cf07a2407a078e8 /gitstatus.plugin.sh
parent98b96e06cc98ef2578adbf83ac4bb35a74485e8f (diff)
Squashed 'gitstatus/' changes from 313fa4f1..1dcba393
1dcba393 bash bindings: provide better diagnostic for the common errors in gitstatus_start 603fb2ce move the rosetta check to `install` 3829edac provide better diagnostic for the common errors in gitstatus_start e8c9d9cd propagate error messages from install to gitstatus_start; add a special diagnostic for rosetta2 git-subtree-dir: gitstatus git-subtree-split: 1dcba3930654c54976f112b96acf2ce23006d9e5
Diffstat (limited to 'gitstatus.plugin.sh')
-rw-r--r--gitstatus.plugin.sh37
1 files changed, 27 insertions, 10 deletions
diff --git a/gitstatus.plugin.sh b/gitstatus.plugin.sh
index e0cd206d..61b81e6a 100644
--- a/gitstatus.plugin.sh
+++ b/gitstatus.plugin.sh
@@ -36,6 +36,17 @@
# -D Unless this option is specified, report zero staged, unstaged and conflicted
# changes for repositories with bash.showDirtyState = false.
function gitstatus_start() {
+ if [[ "$BASH_VERSION" < 4 ]]; then
+ >&2 printf 'gitstatus_start: need bash version >= 4.0, found %s\n' "$BASH_VERSION"
+ >&2 printf '\n'
+ >&2 printf 'To see the version of the current shell, type:\n'
+ >&2 printf '\n'
+ >&2 printf ' \033[32mecho\033[0m \033[33m"$BASH_VERSION"\033[0m\n'
+ >&2 printf '\n'
+ >&2 printf 'The output of `\033[32mbash\033[0m --version` may be different and is not relevant.\n'
+ return 1
+ fi
+
unset OPTIND
local opt timeout=5 max_dirty=-1 extra_flags
local max_num_staged=1 max_num_unstaged=1 max_num_conflicted=1 max_num_untracked=1
@@ -69,7 +80,7 @@ function gitstatus_start() {
local gitstatus_plugin_dir="$PWD"
fi
- local tmpdir req_fifo resp_fifo
+ local tmpdir req_fifo resp_fifo culprit
function gitstatus_start_impl() {
local log_level="${GITSTATUS_LOG_LEVEL:-}"
@@ -137,7 +148,7 @@ function gitstatus_start() {
}
set -- -d "$gitstatus_plugin_dir" -s "$uname_s" -m "$uname_m" \
- -p "printf '.\036' >&$fd_out" -- _gitstatus_set_daemon
+ -p "printf '.\036' >&$fd_out" -e "$fd_out" -- _gitstatus_set_daemon
[[ "${GITSTATUS_AUTO_INSTALL:-1}" -ne 0 ]] || set -- -n "$@"
source "$gitstatus_plugin_dir"/install || return
[[ -n "$_gitstatus_bash_daemon" ]] || return
@@ -166,7 +177,7 @@ function gitstatus_start() {
trap - ${sig[@]}
case "$ret" in
0|129|130|131|137|141|143|159)
- echo -nE $'bye\x1f0\x1e' >&"$fd_out"
+ echo -nE $'}bye\x1f0\x1e' >&"$fd_out"
exit "$ret"
;;
esac
@@ -192,7 +203,7 @@ function gitstatus_start() {
trap "trap - ${sig[*]}; kill $pid &>/dev/null" ${sig[@]}
wait "$pid"
trap - ${sig[@]}
- echo -nE $'bye\x1f0\x1e' >&"$fd_out"
+ echo -nE $'}bye\x1f0\x1e' >&"$fd_out"
) & disown
) & disown
} 0</dev/null &>"$GITSTATUS_DAEMON_LOG"
@@ -205,12 +216,15 @@ function gitstatus_start() {
[[ "$GITSTATUS_DAEMON_PID" == [1-9]* ]] || return
local reply
- echo -nE $'hello\x1f\x1e' >&$_GITSTATUS_REQ_FD || return
+ echo -nE $'}hello\x1f\x1e' >&$_GITSTATUS_REQ_FD || return
local dl=
while true; do
- IFS='' read -rd $'\x1e' -u $_GITSTATUS_RESP_FD -t "$timeout" reply || return
- [[ "$reply" == $'hello\x1f0' ]] && break
- [[ "$reply" == . ]] || return
+ reply=
+ if ! IFS='' read -rd $'\x1e' -u $_GITSTATUS_RESP_FD -t "$timeout" reply; then
+ culprit="$reply"
+ return 1
+ fi
+ [[ "$reply" == $'}hello\x1f0' ]] && break
if [[ -z "$dl" ]]; then
dl=1
if [[ -t 2 ]]; then
@@ -238,8 +252,11 @@ function gitstatus_start() {
}
if ! gitstatus_start_impl; then
- echo "" >&2
- echo "gitstatus_start: failed to start gitstatusd" >&2
+ >&2 printf '\n'
+ >&2 printf '[\033[31mERROR\033[0m]: gitstatus failed to initialize.\n'
+ if [[ -n "${culprit-}" ]]; then
+ >&2 printf '\n%s\n' "$culprit"
+ fi
[[ -z "${req_fifo:-}" ]] || command rm -f "$req_fifo"
[[ -z "${resp_fifo:-}" ]] || command rm -f "$resp_fifo"
unset -f gitstatus_start_impl