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