From 2309790bb91081d044c8385b6d9e29780143e5db Mon Sep 17 00:00:00 2001
From: Richard Hartmann <richih.mailinglist@gmail.com>
Date: Sat, 26 Nov 2011 23:13:49 +0100
Subject: [PATCH] Add more error handling

---
 doc/error_codes.md |  4 ++++
 vcsh               | 23 +++++++++++------------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/doc/error_codes.md b/doc/error_codes.md
index 70496b5..008d4a1 100644
--- a/doc/error_codes.md
+++ b/doc/error_codes.md
@@ -13,5 +13,9 @@
 * 53: Could not move file
 * 54: Directory exists
 * 55: File exists
+* 56: 
+* 57: Could not write to file
+* 57: Could not delete directory
+* 59: Could not delete file
 
 * 99: Error code reserved for actions that should never happen
diff --git a/vcsh b/vcsh
index 2c4e726..3c8d083 100755
--- a/vcsh
+++ b/vcsh
@@ -68,8 +68,7 @@ clone() {
 }
 
 delete() {
-	old_dir="$PWD"
-	cd "$HOME"
+	cd "$HOME" || fatal "could not enter '$HOME'" 11
 	use
 	info "This operation WILL DETROY DATA!"
 	files=$(git ls-files)
@@ -84,8 +83,7 @@ To continue, type \"Yes, do as I say\""
 	for file in $files; do
 		rm -f $file || info "could not delete '$file', continuing with deletion"
 	done
-	rmdir "$GIT_DIR" || info "could not delete '$GIT_DIR'"
-	cd "$old_dir"
+	rmdir "$GIT_DIR" || error "could not delete '$GIT_DIR'"
 }
 
 enter() {
@@ -100,7 +98,7 @@ git_dir_exists() {
 init() {
 	[ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10
 	export GIT_WORK_TREE="$HOME"
-	mkdir -p "$GIT_WORK_TREE"
+	mkdir -p "$GIT_WORK_TREE" || fatal "could not create '$GIT_WORK_TREE'" 50
 	cd "$GIT_WORK_TREE" || fatal "could not enter '$GIT_WORK_TREE'" 11
 	git init
 	setup
@@ -126,7 +124,7 @@ run() {
 
 seed_gitignore() {
 	use
-	cd "$HOME"
+	cd "$HOME" || fatal "could not enter '$HOME'" 11
 	gitignores=$(for file in $(git ls-files); do
 		while true; do
 			echo $file; new="${file%/*}"
@@ -135,14 +133,15 @@ seed_gitignore() {
 		done;
 	done | sort -u)
 	tempfile=$(mktemp) || fatal "could not create tempfile" 51
-	echo '*' > "$tempfile"
+	echo '*' > "$tempfile" || fatal "could not write to '$tempfile'" 57
 	for gitignore in $gitignores; do
-		echo "$gitignore" | sed 's/^/!/' >> "$tempfile"
-		[ -d "$gitignore" ] && echo "$gitignore/*" | sed 's/^/!/'>> "$tempfile"
+		echo "$gitignore" | sed 's/^/!/' >> "$tempfile" || fatal "could not write to '$tempfile'" 57
+		[ -d "$gitignore" ] && echo "$gitignore/*" | sed 's/^/!/'>> "$tempfile" || fatal "could not write to '$tempfile'" 57
 	done
-	diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null &&
-		rm -f "$tempfile" &&
+	if [ diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null ]; then
+		rm -f "$tempfile" || error "could not delete '$tempfile'"
 		exit
+	fi
 	if [ -e "$HOME/.gitignore.d/$VCSH_REPO_NAME" ]; then
 		info "'$HOME/.gitignore.d/$VCSH_REPO_NAME' differs from new data, moving it to '$HOME/.gitignore.d/$VCSH_REPO_NAME.bak'"
 		mv -f "$HOME/.gitignore.d/$VCSH_REPO_NAME" "$HOME/.gitignore.d/$VCSH_REPO_NAME.bak" ||
@@ -157,7 +156,7 @@ setup() {
 	git config core.worktree     "$GIT_WORK_TREE"
 	git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME"
 	git config vcsh.vcsh         'true'
-	touch   "$HOME/.gitignore.d/$VCSH_REPO_NAME"
+	touch   "$HOME/.gitignore.d/$VCSH_REPO_NAME" || error "could not touch '$HOME/.gitignore.d/$VCSH_REPO_NAME'"
 	git add "$HOME/.gitignore.d/$VCSH_REPO_NAME"
 }
 
-- 
GitLab