populate-fully.sh: don't enter the repository if updating working tree fails
[config/vcsh.git] / .config / vcsh / hooks-available / populate-fully.sh
index ceff12f..d398a90 100755 (executable)
@@ -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