105 lines
1.6 KiB
Bash
Executable File
105 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
format_one () {
|
|
source_dir="$1"
|
|
command="$2"
|
|
attributes="$3"
|
|
|
|
path="$source_dir/Documentation/$command.adoc"
|
|
if ! test -f "$path"
|
|
then
|
|
echo >&2 "No such file $path"
|
|
exit 1
|
|
fi
|
|
|
|
state=0
|
|
while read line
|
|
do
|
|
case "$state" in
|
|
0)
|
|
case "$line" in
|
|
git*\(*\)|scalar*\(*\))
|
|
mansection="${line##*\(}"
|
|
mansection="${mansection%\)}"
|
|
;;
|
|
NAME)
|
|
state=1;;
|
|
esac
|
|
;;
|
|
1)
|
|
if test "$line" = "----"
|
|
then
|
|
state=2
|
|
fi
|
|
;;
|
|
2)
|
|
description="$line"
|
|
break
|
|
;;
|
|
esac
|
|
done <"$path"
|
|
|
|
if test -z "$mansection"
|
|
then
|
|
echo "No man section found in $path" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if test -z "$description"
|
|
then
|
|
echo >&2 "No description found in $path"
|
|
exit 1
|
|
fi
|
|
|
|
case "$description" in
|
|
"$command - "*)
|
|
text="${description#$command - }"
|
|
|
|
printf "linkgit:%s[%s]::\n\t" "$command" "$mansection"
|
|
case "$attributes" in
|
|
*" deprecated "*)
|
|
printf "(deprecated) "
|
|
;;
|
|
esac
|
|
printf "$text.\n\n"
|
|
;;
|
|
*)
|
|
echo >&2 "Description does not match $command: $description"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
source_dir="$1"
|
|
build_dir="$2"
|
|
shift 2
|
|
|
|
for out
|
|
do
|
|
category="${out#cmds-}"
|
|
category="${category%.adoc}"
|
|
path="$build_dir/$out"
|
|
|
|
while read command command_category attributes
|
|
do
|
|
case "$command" in
|
|
"#"*)
|
|
continue;;
|
|
esac
|
|
|
|
case "$command_category" in
|
|
"$category")
|
|
format_one "$source_dir" "$command" " $attributes ";;
|
|
esac
|
|
done <"$source_dir/command-list.txt" >"$build_dir/$out+"
|
|
|
|
if cmp "$build_dir/$out+" "$build_dir/$out" >/dev/null 2>&1
|
|
then
|
|
rm "$build_dir/$out+"
|
|
else
|
|
mv "$build_dir/$out+" "$build_dir/$out"
|
|
fi
|
|
done
|