mirror of
https://github.com/git/git
synced 2024-11-04 16:17:49 +00:00
974cdca345
In order to follow the common manpage usage, the synopsis of the commands needs to be heavily typeset. A first try was performed with using native markup, but it turned out to make the document source almost unreadable, difficult to write and prone to mistakes with unwanted Asciidoc's role attributes. In order to both simplify the writer's task and obtain a consistant typesetting in the synopsis, a custom 'synopsis' paragraph type is created and the processor for backticked text are modified. The backends of asciidoc and asciidoctor take in charge to correctly add the required typesetting. Signed-off-by: Jean-Noël Avila <jn.avila@free.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
171 lines
3.6 KiB
Bash
Executable file
171 lines
3.6 KiB
Bash
Executable file
#!/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|synopsis)\]$/,/^$/ {
|
|
/^$/d;
|
|
/^\[(verse|synopsis)\]$/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
|