|  | #!/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 expecte 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 |