From: Antonio Ospite <ao2@ao2.it>
Date: Thu, 13 Dec 2018 23:15:05 +0000 (+0100)
Subject: hooks-available: avoid some errors with empty repositories
X-Git-Url: https://git.ao2.it/config/vcsh.git/commitdiff_plain/8bdae58f5b9906d57e5d4384e5fda1b93cef6aac?hp=3535ec27f70d73034e315faf7e3ded8c75c0413d

hooks-available: avoid some errors with empty repositories

When entering a repository which has just been created the HEAD
reference does not exist yet  and "git read-tree -mu HEAD" would
complain loudly about that, giving a confusing error to users.

Avoid the error by checking the validity of HEAD before updating the
working tree.
---

diff --git a/.config/vcsh/hooks-available/populate-fully.sh b/.config/vcsh/hooks-available/populate-fully.sh
index ceff12f..0439174 100755
--- a/.config/vcsh/hooks-available/populate-fully.sh
+++ b/.config/vcsh/hooks-available/populate-fully.sh
@@ -30,10 +30,16 @@ 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"
+  git read-tree -mu HEAD
+  git config core.sparseCheckout false
+fi
diff --git a/.config/vcsh/hooks-available/populate-sparsely.sh b/.config/vcsh/hooks-available/populate-sparsely.sh
index 53d2b3a..33c1fb0 100755
--- a/.config/vcsh/hooks-available/populate-sparsely.sh
+++ b/.config/vcsh/hooks-available/populate-sparsely.sh
@@ -16,7 +16,14 @@ LOCKPID=$(cat "$LOCKDIR/pid")
 
 : "${XDG_CONFIG_HOME:="$HOME/.config"}"
 . "$XDG_CONFIG_HOME/vcsh/hooks-available/sparse-checkout.sh"
-git read-tree -mu HEAD
+
+# 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 -mu HEAD
+fi
 
 # Unlock the working tree.
 rm -rf "$LOCKDIR"