From 1e998f5285ad5d4a52012f0a4385f7df7a3a6fcd Mon Sep 17 00:00:00 2001
From: Kevin Lyda <kevin@ie.suberic.net>
Date: Mon, 28 Aug 2017 11:25:45 +0100
Subject: [PATCH] Number of bug fixes I use at home.

* Fix parsing of git versions on OS X.
* Fix hook handling.
* Add editor modeline blurb to follow file standards.
* Do not abbriviate commit as co; do abbreviate as ci.
---
 vcsh | 62 ++++++++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 48 insertions(+), 14 deletions(-)

diff --git a/vcsh b/vcsh
index f06f5b4..77aef05 100755
--- a/vcsh
+++ b/vcsh
@@ -166,7 +166,7 @@ clone() {
   You should add files to your new repository."
 		exit
 	fi
-	GIT_VERSION_MAJOR=$(git --version | sed -n 's/.* \([0-9]\+\)\..*/\1/p' )
+	GIT_VERSION_MAJOR=$(git --version | sed -n 's/.* \([0-9][0-9]*\)\..*/\1/p' )
 	if [ 1 -lt "$GIT_VERSION_MAJOR" ];then
 		git fetch origin "$VCSH_BRANCH"
 	else
@@ -189,17 +189,19 @@ clone() {
 }
 
 commit() {
-	hook pre-commit
+	global_hook pre-commit
         shift  # remove the "commit" command.
 	for VCSH_REPO_NAME in $(list); do
 		echo "$VCSH_REPO_NAME: "
 		GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR
 		use
+                repo_hook pre-commit
 		git commit --untracked-files=no --quiet "$@"
+                repo_hook post-commit
 		VCSH_COMMAND_RETURN_CODE=$?
 		echo
 	done
-	hook post-commit
+	global_hook post-commit
 }
 
 delete() {
@@ -229,7 +231,7 @@ enter() {
 }
 
 foreach() {
-	hook pre-foreach
+	global_hook pre-foreach
 
 	# We default to prefixing `git` to all commands passed to foreach, but
 	# allow running in general context with -g
@@ -244,23 +246,38 @@ foreach() {
 		echo "$VCSH_REPO_NAME:"
 		GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR
 		use
+                repo_hook pre-foreach
 		$command_prefix "$@"
+                repo_hook post-foreach
 	done
-	hook post-foreach
+	global_hook post-foreach
 }
 
 git_dir_exists() {
 	[ -d "$GIT_DIR" ] || fatal "no repository found for '$VCSH_REPO_NAME'" 12
 }
 
-hook() {
-	for hook in "$VCSH_HOOK_D/$1"* "$VCSH_HOOK_D/$VCSH_REPO_NAME.$1"*; do
+global_hook() {
+	for hook in "$VCSH_HOOK_D/$1"*; do
 		[ -x "$hook" ] || continue
 		verbose "executing '$hook'"
 		"$hook"
 	done
 }
 
+repo_hook() {
+	for hook in "$VCSH_HOOK_D/$VCSH_REPO_NAME.$1"*; do
+		[ -x "$hook" ] || continue
+		verbose "executing '$hook'"
+		"$hook"
+	done
+}
+
+hook() {
+        global_hook "$1"
+        repo_hook "$1"
+}
+
 init() {
 	hook pre-init
 	[ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10
@@ -354,29 +371,33 @@ list_untracked_helper() {
 }
 
 pull() {
-	hook pre-pull
+	global_hook pre-pull
 	for VCSH_REPO_NAME in $(list); do
 		printf '%s: ' "$VCSH_REPO_NAME"
 		GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR
 		use
+                repo_hook pre-pull
 		git pull
+                repo_hook post-pull
 		VCSH_COMMAND_RETURN_CODE=$?
 		echo
 	done
-	hook post-pull
+	global_hook post-pull
 }
 
 push() {
-	hook pre-push
+	global_hook pre-push
 	for VCSH_REPO_NAME in $(list); do
 		printf '%s: ' "$VCSH_REPO_NAME"
 		GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR
 		use
+                repo_hook pre-push
 		git push
+                repo_hook post-push
 		VCSH_COMMAND_RETURN_CODE=$?
 		echo
 	done
-	hook post-push
+	global_hook post-push
 }
 
 retire() {
@@ -482,8 +503,8 @@ write_gitignore() {
 	use
 	cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11
 	local GIT_VERSION="$(git --version)"
-	local GIT_VERSION_MAJOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9]\+\)\..*/\1/p')
-	local GIT_VERSION_MINOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9]\+\)\.\([0-9]\+\)\..*/\2/p')
+	local GIT_VERSION_MAJOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9][0-9]*\)\..*/\1/p')
+	local GIT_VERSION_MINOR=$(echo $GIT_VERSION | sed -n 's/.* \([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*/\2/p')
 	OLDIFS=$IFS
 	IFS=$(printf '\n\t')
 	gitignores=$(for file in $(git ls-files); do
@@ -534,7 +555,7 @@ VCSH_COMMAND=$1; export VCSH_COMMAND
 
 case $VCSH_COMMAND in
 	clon|clo|cl) VCSH_COMMAND=clone;;
-	commi|comm|com|co) VCSH_COMMAND=commit;;
+	commi|comm|com|ci) VCSH_COMMAND=commit;;
 	delet|dele|del|de) VCSH_COMMAND=delete;;
 	ente|ent|en) VCSH_COMMAND=enter;;
 	hel|he) VCSH_COMMAND=help;;
@@ -672,3 +693,16 @@ $VCSH_COMMAND "$@"
 hook post-command
 verbose "$VCSH_COMMAND end, exiting"
 exit $VCSH_COMMAND_RETURN_CODE
+
+#
+# Editor modelines  -  https://www.wireshark.org/tools/modelines.html
+#
+# Local variables:
+# c-basic-offset: 8
+# tab-width: 8
+# indent-tabs-mode: t
+# End:
+#
+# vi: set shiftwidth=8 tabstop=8 noexpandtab:
+# :indentSize=8:tabSize=8:noTabs=false:
+#
-- 
GitLab