hooks: set up sparse checkout after cloning the vcsh repository
[config/vcsh.git] / .config / vcsh / hooks-available / populate-fully.sh
index 0439174..6af9ebd 100755 (executable)
@@ -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.
   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.
   then
     # Kill the parent process instead of just bailing out because vcsh does
     # not catch the hook exit value.
@@ -40,6 +40,15 @@ then
   git config core.sparseCheckout true
   rm -f "$GIT_DIR/info/sparse-checkout"
   echo "/*" > "$GIT_DIR/info/sparse-checkout"
   git config core.sparseCheckout true
   rm -f "$GIT_DIR/info/sparse-checkout"
   echo "/*" > "$GIT_DIR/info/sparse-checkout"
-  git read-tree -mu HEAD
+  RET=0
+  git read-tree -mu HEAD || RET=$?
   git config core.sparseCheckout false
   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
 fi