Subject: Re: [PATCH v2 01/10] git-rebase.sh: Fix --merge --abort failures when path contains whitespace

From: Junio C Hamano <[email-masked]>
Date: Thu, 10 Apr 2008 00:45:51 -0700

Bryan Donlan <[email-masked]> writes:

> +### Test that we handle strange characters properly

Thanks for the fix and updated tests.

> +work_dir="$(pwd)/test \" ' \$ \\ dir"
> +
>  test_expect_success setup '
> +	mkdir -p "$work_dir" &&
> +	cd "$work_dir" &&
> +	git init &&

As you know that $work_dir and shell variables in general are available
inside test_expect_* framework without anything special, like the above
code,...

> @@ -27,42 +33,45 @@ testrebase() {
>  	type=$1
>  	dotest=$2
>  
> +	test_expect_success "rebase$type --abort" "
> +		cd \"\$work_dir\" &&
>  		# Clean up the state from the previous one
> +		git reset --hard pre-rebase &&
> +		test_must_fail git rebase$type master &&
> +		test -d \"\$dotest\" &&
> ...

this part would become a lot easier to read if you just stayed inside the
original single quoted test script without introducing excessive
backslashes.

I am very inclined to replace t3407 with the following.

diff --git a/t/t3407-rebase-abort.sh b/t/t3407-rebase-abort.sh
index 37944c3..cadfb23 100755
--- a/t/t3407-rebase-abort.sh
+++ b/t/t3407-rebase-abort.sh
@@ -4,7 +4,13 @@ test_description='git rebase --abort tests'
 
 . ./test-lib.sh
 
+### Test that we handle strange characters properly
+work_dir="$(pwd)/test \" ' \$ \\ dir"
+
 test_expect_success setup '
+	mkdir -p "$work_dir" &&
+	cd "$work_dir" &&
+	git init &&
 	echo a > a &&
 	git add a &&
 	git commit -m a &&
@@ -28,32 +34,35 @@ testrebase() {
 	dotest=$2
 
 	test_expect_success "rebase$type --abort" '
+		cd "$work_dir" &&
 		# Clean up the state from the previous one
-		git reset --hard pre-rebase
-		test_must_fail git rebase'"$type"' master &&
-		test -d '$dotest' &&
+		git reset --hard pre-rebase &&
+		test_must_fail git rebase$type master &&
+		test -d "$dotest" &&
 		git rebase --abort &&
 		test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
-		test ! -d '$dotest'
+		test ! -d "$dotest"
 	'
 
 	test_expect_success "rebase$type --abort after --skip" '
+		cd "$work_dir" &&
 		# Clean up the state from the previous one
-		git reset --hard pre-rebase
-		test_must_fail git rebase'"$type"' master &&
-		test -d '$dotest' &&
+		git reset --hard pre-rebase &&
+		test_must_fail git rebase$type master &&
+		test -d "$dotest" &&
 		test_must_fail git rebase --skip &&
 		test $(git rev-parse HEAD) = $(git rev-parse master) &&
 		git-rebase --abort &&
 		test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
-		test ! -d '$dotest'
+		test ! -d "$dotest"
 	'
 
 	test_expect_success "rebase$type --abort after --continue" '
+		cd "$work_dir" &&
 		# Clean up the state from the previous one
-		git reset --hard pre-rebase
-		test_must_fail git rebase'"$type"' master &&
-		test -d '$dotest' &&
+		git reset --hard pre-rebase &&
+		test_must_fail git rebase$type master &&
+		test -d "$dotest" &&
 		echo c > a &&
 		echo d >> a &&
 		git add a &&
@@ -61,7 +70,7 @@ testrebase() {
 		test $(git rev-parse HEAD) != $(git rev-parse master) &&
 		git rebase --abort &&
 		test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
-		test ! -d '$dotest'
+		test ! -d "$dotest"
 	'
 }