X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/15081fe001484b3337b60d0874d7ff4f608c1cc8..c3ead3b6011c379ca5038b9a73ec8be824dd422b:/vcsh

diff --git a/vcsh b/vcsh
index e3612b7..0df962b 100755
--- a/vcsh
+++ b/vcsh
@@ -1,43 +1,52 @@
 #!/bin/sh
 
-#set -x
+[ -n "$VCSH_DEBUG" ] && set -x
 
 SELF=$(basename $0)
 
-[ -z $XDG_CONFIG_HOME ] && XDG_CONFIG_HOME="$HOME/.config"
-for check_directory in $XDG_CONFIG_HOME $XDG_CONFIG_HOME/vcsh $XDG_CONFIG_HOME/vcsh/repo.d
+[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
+for check_directory in "$XDG_CONFIG_HOME" "$XDG_CONFIG_HOME/vcsh" "$XDG_CONFIG_HOME/vcsh/repo.d"
 do
-	if [ ! -d $check_directory ]; then
-		if [ -e $check_directory ]; then
+	if [ ! -d "$check_directory" ]; then
+		if [ -e "$check_directory" ]; then
 			echo "$SELF: error: $check_directory exists but is not a directory" >&2
 			exit 2
 		else
-			mkdir $check_directory || (echo "$SELF: error: could not create $check_directory" >&2; exit 2)
+			mkdir "$check_directory" || (echo "$SELF: error: could not create $check_directory" >&2; exit 2)
 		fi
 	fi
 done
 
 VCSH_BASE="$XDG_CONFIG_HOME/vcsh/repo.d"
 
+debug() {
+	[ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1"
+}
+
+verbose() {
+	if [ -n "$VCSH_DEBUG" ] || [ -n "$VCSH_VERBOSE" ]; then echo "$SELF: verbose: $1"; fi
+}
+
+#   use <repo>     Use this repository
+#
+#   exit              Exit vcsh mode" >&2
 help() {
 	echo "usage: $SELF <args>
 
-   help           Display this help
-
-   list           List all repos
+   help              Display this help
 
-   use <repo>     Use this repository
-   run <repo>
-       <command>  Use this repository
+   list              List all repos
 
-   init           Initialize a new repository
-   clone <remote>
-         [<repo>] Clone from an existing repository
+   run <repo> \\
+       <command>     Use this repository
 
-   exit           Exit vcsh mode" >&2
+   init <repo>       Initialize a new repository
+   clone <remote> \\
+         [<repo>]    Clone from an existing repository" >&2
 }
 
 use() {
+	verbose "use() begin"
 	REPO_NAME="$1"
 	GIT_DIR="$VCSH_BASE/$REPO_NAME.git"
 
@@ -49,20 +58,23 @@ use() {
 	export GIT_DIR
 	export GIT_WORK_TREE="$(git config --get core.worktree)"
 	export VCSH_DIRECTORY="$REPO_NAME"
+	verbose "use() end"
 }
 
 init() {
-	[[ -e $GIT_DIR ]] &&
+	verbose "init() begin"
+	[ -e "$GIT_DIR" ] &&
 		echo "$SELF: fatal: $GIT_DIR exists" &&
 		return 21
 	export GIT_WORK_TREE="$HOME"
-	mkdir -p $GIT_WORK_TREE
-	cd $GIT_WORK_TREE ||
+	mkdir -p "$GIT_WORK_TREE"
+	cd "$GIT_WORK_TREE" ||
 		(echo "$SELF: fatal: could not enter $GIT_WORK_TREE" &&
 		 exit 20) || exit 20
-	cd $GIT_WORK_TREE
+	cd "$GIT_WORK_TREE"
 	git init
-	git config core.worktree $GIT_WORK_TREE
+	git config core.worktree "$GIT_WORK_TREE"
+	verbose "init() end"
 }
 
 leave() {
@@ -71,82 +83,96 @@ leave() {
 	unset VCSH_DIRECTORY
 }
 
-if [ "$1" = 'help' ] || [ $# -eq 0 ]; then
+if [ "$1" = 'help' ] || [ "$#" -eq 0 ]; then
 	help
 	[ "$1" = 'help' ]
-	return $?
+	exit $?
 
 elif [ "$1" = 'list' ]; then
-	for i in $VCSH_BASE/*.git; do
-		echo $(basename $i .git)
+	verbose "list begin"
+	for i in "$VCSH_BASE"/*.git; do
+		echo $(basename "$i" .git)
 	done
-	return 0
+	verbose "list end"
+	exit 0
 
 elif [ "$1" = 'run' ]; then
-	use $2
+	verbose "run begin"
+	use "$2"
 	shift 2
 	"$@"
 	leave
-	return 0
-
-elif [ "$1" = 'use' ]; then
-	if [[ -o NO_IGNORE_EOF ]]; then
-		export VCSH_NO_IGNORE_EOF=1
-		setopt IGNORE_EOF
-		if [[ -n $ZSH_VERSION ]]; then
-			vcsh_exit() {
-				vcsh exit;
-				zle reset-prompt;
-			}
-		fi
-		zle -N vcsh_exit
-		bindkey '^d' 'vcsh_exit'
-	fi
-	use $2
-	buildPS1
-	return 0
+	verbose "run end"
+	exit 0
+
+#elif [ "$1" = 'use' ]; then
+#	verbose "use begin"
+#	if [ -n "$ZSH_VERSION" ]; then
+#		if [ -o NO_IGNORE_EOF ]; then
+#			export VCSH_NO_IGNORE_EOF=1
+#			setopt IGNORE_EOF
+#		fi
+#		vcsh_exit() {
+#			vcsh exit;
+#			zle reset-prompt;
+#		}
+#		zle -N vcsh_exit
+#		bindkey '^d' 'vcsh_exit'
+#	fi
+#	use $2
+#	[ -n "$ZSH_VERSION" ] && [ "$USER" = richih ] && buildPS1
+#	verbose "use end"
+#	exit 0
 
 elif [ "$1" = 'clone' ]; then
+	verbose "clone begin"
 	GIT_REMOTE="$2"
 	REPO_NAME="$3"
-	[[ -z $REPO_NAME ]] && REPO_NAME=$(basename $GIT_REMOTE .git)
+	[ -z "$REPO_NAME" ] && REPO_NAME=$(basename "$GIT_REMOTE" .git)
 	export REPO_NAME
 	export GIT_DIR="$VCSH_BASE/$REPO_NAME.git"
 	init
 
-	git remote add origin $GIT_REMOTE
+	git remote add origin "$GIT_REMOTE"
 	git config branch.master.remote origin
 	git config branch.master.merge  refs/heads/master
 	git fetch
-	for i in $(git ls-tree -r origin/master | awk '{print $4}'); do
-	[[ -e $i ]] &&
-		echo "$SELF: error: $i exists." &&
-		CONFLICT=1;
+	for object in $(git ls-tree -r origin/master | awk '{print $4}'); do
+		[ -e "$object" ] &&
+			echo "$SELF: error: $object exists." &&
+			VCSH_CONFLICT=1;
 	done
-	[[ -n $CONFLICT ]] &&
+	[ "$VCSH_CONFLICT" = '1' ] &&
 		echo "$SELF: fatal: will stop after fetching and not try to merge!\n" &&
 		exit 3
 	git merge origin/master
-	vcsh use $REPO_NAME
+#	vcsh use $REPO_NAME
+	verbose "clone end"
 
 elif [ "$1" = 'init' ]; then
+	verbose "init begin"
+	[ -z $2 ] && help && return 0
 	export REPO_NAME="$2"
 	export GIT_DIR="$VCSH_BASE/$REPO_NAME.git"
 	init
-	vcsh use $REPO_NAME
-
-elif [ "$1" = 'exit' ]; then
-	if [[ $VCSH_NO_IGNORE_EOF -gt 0 ]]; then
-		unset VCSH_NO_IGNORE_EOF
-		setopt NO_IGNORE_EOF
-	fi
-	leave
-	buildPS1
-	return 0
+#	vcsh use "$REPO_NAME"
+	verbose "init end"
+
+#elif [ "$1" = 'exit' ]; then
+#	verbose "exit begin"
+#	if [ -n "$ZSH_VERSION" ] && [ "$VCSH_NO_IGNORE_EOF" = '1' ]; then
+#		unset VCSH_NO_IGNORE_EOF
+#		setopt NO_IGNORE_EOF
+#	fi
+#	leave
+#	[ -n "$ZSH_VERSION" ] && [ "$USER" = richih ] && buildPS1
+#	verbose "exit end"
+#	exit 0
 
 else
+	verbose "defaulting to calling help()"
 	help
-	return 3
+	exit 3
 
 fi