| #!/bin/sh | 
 |  | 
 | test_description='log/show --expand-tabs' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | HT="	" | 
 | title='tab indent at the beginning of the title line' | 
 | body='tab indent on a line in the body' | 
 |  | 
 | # usage: count_expand $indent $numSP $numHT @format_args | 
 | count_expand () | 
 | { | 
 | 	expect= | 
 | 	count=$(( $1 + $2 )) ;# expected spaces | 
 | 	while test $count -gt 0 | 
 | 	do | 
 | 		expect="$expect " | 
 | 		count=$(( $count - 1 )) | 
 | 	done | 
 | 	shift 2 | 
 | 	count=$1 ;# expected tabs | 
 | 	while test $count -gt 0 | 
 | 	do | 
 | 		expect="$expect$HT" | 
 | 		count=$(( $count - 1 )) | 
 | 	done | 
 | 	shift | 
 |  | 
 | 	# The remainder of the command line is "git show -s" options | 
 | 	case " $* " in | 
 | 	*' --pretty=short '*) | 
 | 		line=$title ;; | 
 | 	*) | 
 | 		line=$body ;; | 
 | 	esac | 
 |  | 
 | 	# Prefix the output with the command line arguments, and | 
 | 	# replace SP with a dot both in the expected and actual output | 
 | 	# so that test_cmp would show the difference together with the | 
 | 	# breakage in a way easier to consume by the debugging user. | 
 | 	{ | 
 | 		echo "git show -s $*" | 
 | 		echo "$expect$line" | 
 | 	} | sed -e 's/ /./g' >expect | 
 |  | 
 | 	{ | 
 | 		echo "git show -s $*" | 
 | 		git show -s "$@" | | 
 | 		sed -n -e "/$line\$/p" | 
 | 	} | sed -e 's/ /./g' >actual | 
 |  | 
 | 	test_cmp expect actual | 
 | } | 
 |  | 
 | test_expand () | 
 | { | 
 | 	fmt=$1 | 
 | 	case "$fmt" in | 
 | 	*=raw | *=short | *=email) | 
 | 		default="0 1" ;; | 
 | 	*) | 
 | 		default="8 0" ;; | 
 | 	esac | 
 | 	case "$fmt" in | 
 | 	*=email) | 
 | 		in=0 ;; | 
 | 	*) | 
 | 		in=4 ;; | 
 | 	esac | 
 | 	test_expect_success "expand/no-expand${fmt:+ for $fmt}" ' | 
 | 		count_expand $in $default $fmt && | 
 | 		count_expand $in 8 0 $fmt --expand-tabs && | 
 | 		count_expand $in 8 0 --expand-tabs $fmt && | 
 | 		count_expand $in 8 0 $fmt --expand-tabs=8 && | 
 | 		count_expand $in 8 0 --expand-tabs=8 $fmt && | 
 | 		count_expand $in 0 1 $fmt --no-expand-tabs && | 
 | 		count_expand $in 0 1 --no-expand-tabs $fmt && | 
 | 		count_expand $in 0 1 $fmt --expand-tabs=0 && | 
 | 		count_expand $in 0 1 --expand-tabs=0 $fmt && | 
 | 		count_expand $in 4 0 $fmt --expand-tabs=4 && | 
 | 		count_expand $in 4 0 --expand-tabs=4 $fmt | 
 | 	' | 
 | } | 
 |  | 
 | test_expect_success 'setup' ' | 
 | 	test_tick && | 
 | 	sed -e "s/Q/$HT/g" <<-EOF >msg && | 
 | 	Q$title | 
 |  | 
 | 	Q$body | 
 | 	EOF | 
 | 	git commit --allow-empty -F msg | 
 | ' | 
 |  | 
 | test_expand "" | 
 | test_expand --pretty | 
 | test_expand --pretty=short | 
 | test_expand --pretty=medium | 
 | test_expand --pretty=full | 
 | test_expand --pretty=fuller | 
 | test_expand --pretty=raw | 
 | test_expand --pretty=email | 
 |  | 
 | test_done |