X-Git-Url: https://git.ao2.it/config/vcsh.git/blobdiff_plain/3535ec27f70d73034e315faf7e3ded8c75c0413d..f56cf1fee2d7d4463fda8664aec2a2d6e6d5458a:/.config/vcsh/hooks-available/populate-fully.sh diff --git a/.config/vcsh/hooks-available/populate-fully.sh b/.config/vcsh/hooks-available/populate-fully.sh index ceff12f..6af9ebd 100755 --- a/.config/vcsh/hooks-available/populate-fully.sh +++ b/.config/vcsh/hooks-available/populate-fully.sh @@ -15,7 +15,7 @@ then echo "An instance of vcsh already entered a repository." 1>&2 # Exit vcsh if the process which keeps the lock is still alive. - if kill -0 $(cat "$LOCKDIR/pid") 2>/dev/null; + if kill -0 "$(cat "$LOCKDIR/pid")" 2>/dev/null; then # Kill the parent process instead of just bailing out because vcsh does # not catch the hook exit value. @@ -30,10 +30,25 @@ fi # Lock on the parent pid because the hooks are launched as children of vcsh. echo $PPID > "$LOCKDIR/pid" -# git read-tree manual page says this is the proper way to fully repopulate -# the working tree. -git config core.sparseCheckout true -rm -f "$GIT_DIR/info/sparse-checkout" -echo "/*" > "$GIT_DIR/info/sparse-checkout" -git read-tree -mu HEAD -git config core.sparseCheckout false +# Verify if the current branch is valid before updating the working tree. +# This avoids errors with empty repositories which would only confuse the +# user. +if git rev-parse --verify HEAD >/dev/null 2>&1; +then + # git read-tree manual page says this is the proper way to fully repopulate + # the working tree. + git config core.sparseCheckout true + rm -f "$GIT_DIR/info/sparse-checkout" + echo "/*" > "$GIT_DIR/info/sparse-checkout" + RET=0 + git read-tree -mu HEAD || RET=$? + git config core.sparseCheckout false + + # if updating the working tree failed exit the whole vcsh process to prevent + # entering the repository. + if [ $RET -ne 0 ]; + then + echo "Fix the problems before entering the repository." 1>&2 + kill -- -$PPID + fi +fi