| #!/bin/sh |
| |
| test_description='assert (unbuilt) Documentation/*.txt and -h output |
| |
| Run this with --debug to see a summary of where we still fail to make |
| the two versions consistent with one another.' |
| |
| TEST_PASSES_SANITIZE_LEAK=true |
| . ./test-lib.sh |
| |
| test_expect_success 'setup: list of builtins' ' |
| git --list-cmds=builtins >builtins |
| ' |
| |
| test_expect_success 'list of txt and help mismatches is sorted' ' |
| sort -u "$TEST_DIRECTORY"/t0450/txt-help-mismatches >expect && |
| if ! test_cmp expect "$TEST_DIRECTORY"/t0450/txt-help-mismatches |
| then |
| BUG "please keep the list of txt and help mismatches sorted" |
| fi |
| ' |
| |
| help_to_synopsis () { |
| builtin="$1" && |
| out_dir="out/$builtin" && |
| out="$out_dir/help.synopsis" && |
| if test -f "$out" |
| then |
| echo "$out" && |
| return 0 |
| fi && |
| mkdir -p "$out_dir" && |
| test_expect_code 129 git $builtin -h >"$out.raw" 2>&1 && |
| sed -n \ |
| -e '1,/^$/ { |
| /^$/d; |
| s/^usage: //; |
| s/^ *or: //; |
| p; |
| }' <"$out.raw" >"$out" && |
| echo "$out" |
| } |
| |
| builtin_to_txt () { |
| echo "$GIT_BUILD_DIR/Documentation/git-$1.txt" |
| } |
| |
| txt_to_synopsis () { |
| builtin="$1" && |
| out_dir="out/$builtin" && |
| out="$out_dir/txt.synopsis" && |
| if test -f "$out" |
| then |
| echo "$out" && |
| return 0 |
| fi && |
| b2t="$(builtin_to_txt "$builtin")" && |
| sed -n \ |
| -e '/^\[verse\]$/,/^$/ { |
| /^$/d; |
| /^\[verse\]$/d; |
| |
| s/{litdd}/--/g; |
| s/'\''\(git[ a-z-]*\)'\''/\1/g; |
| |
| p; |
| }' \ |
| <"$b2t" >"$out" && |
| echo "$out" |
| } |
| |
| check_dashed_labels () { |
| ! grep -E "<[^>_-]+_" "$1" |
| } |
| |
| HT=" " |
| |
| align_after_nl () { |
| builtin="$1" && |
| len=$(printf "git %s " "$builtin" | wc -c) && |
| pad=$(printf "%${len}s" "") && |
| |
| sed "s/^[ $HT][ $HT]*/$pad/" |
| } |
| |
| test_debug '>failing' |
| while read builtin |
| do |
| # -h output assertions |
| test_expect_success "$builtin -h output has no \t" ' |
| h2s="$(help_to_synopsis "$builtin")" && |
| ! grep "$HT" "$h2s" |
| ' |
| |
| test_expect_success "$builtin -h output has dashed labels" ' |
| check_dashed_labels "$(help_to_synopsis "$builtin")" |
| ' |
| |
| test_expect_success "$builtin -h output has consistent spacing" ' |
| h2s="$(help_to_synopsis "$builtin")" && |
| sed -n \ |
| -e "/^ / { |
| s/[^ ].*//; |
| p; |
| }" \ |
| <"$h2s" >help && |
| sort -u help >help.ws && |
| if test -s help.ws |
| then |
| test_line_count = 1 help.ws |
| fi |
| ' |
| |
| txt="$(builtin_to_txt "$builtin")" && |
| preq="$(echo BUILTIN_TXT_$builtin | tr '[:lower:]-' '[:upper:]_')" && |
| |
| if test -f "$txt" |
| then |
| test_set_prereq "$preq" |
| fi && |
| |
| # *.txt output assertions |
| test_expect_success "$preq" "$builtin *.txt SYNOPSIS has dashed labels" ' |
| check_dashed_labels "$(txt_to_synopsis "$builtin")" |
| ' |
| |
| # *.txt output consistency assertions |
| result= |
| if grep -q "^$builtin$" "$TEST_DIRECTORY"/t0450/txt-help-mismatches |
| then |
| result=failure |
| else |
| result=success |
| fi && |
| test_expect_$result "$preq" "$builtin -h output and SYNOPSIS agree" ' |
| t2s="$(txt_to_synopsis "$builtin")" && |
| if test "$builtin" = "merge-tree" |
| then |
| test_when_finished "rm -f t2s.new" && |
| sed -e '\''s/ (deprecated)$//g'\'' <"$t2s" >t2s.new |
| t2s=t2s.new |
| fi && |
| h2s="$(help_to_synopsis "$builtin")" && |
| |
| # The *.txt and -h use different spacing for the |
| # alignment of continued usage output, normalize it. |
| align_after_nl "$builtin" <"$t2s" >txt && |
| align_after_nl "$builtin" <"$h2s" >help && |
| test_cmp txt help |
| ' |
| |
| if test_have_prereq "$preq" && test -e txt && test -e help |
| then |
| test_debug ' |
| if test_cmp txt help >cmp 2>/dev/null |
| then |
| echo "=== DONE: $builtin ===" |
| else |
| echo "=== TODO: $builtin ===" && |
| cat cmp |
| fi >>failing |
| ' |
| |
| # Not in test_expect_success in case --run is being |
| # used with --debug |
| rm -f txt help tmp 2>/dev/null |
| fi |
| done <builtins |
| |
| test_debug 'say "$(cat failing)"' |
| |
| test_done |