#!/bin/bash # Usage: script/man [] # # Generate individual man pages from inline help text of hub commands. set -e extensions=" am apply checkout cherry-pick clone fetch init merge push remote submodule " commands=" alias browse ci-status compare create fork pull-request " AWK="$(type -p gawk awk | head -1)" hub_help() { bin/hub help "hub-$1" --plain-text | sed $'s/\t/ /g' } para() { "$AWK" -v wants=$2 " BEGIN { para=1 } /^\$/ { para++ } { if (para $1 wants) print \$0 } " } trim() { sed 's/^ \{1,\}//; s/ \{1,\}$//' } format_shortdesc() { tr $'\n' " " | trim } format_synopsis() { local cmd subcmd rest sed 's/^Usage://' | while read -r cmd subcmd rest; do printf '`%s %s` %s \n' "$cmd" "$subcmd" "$rest" done } format_rest() { "$AWK" ' /^#/ { title=toupper(substr($0, length($1) + 2, length($0))) sub(/:$/, "", title) options=title == "OPTIONS" print $1, title next } options && /^ [^ ]/ { printf " * %s:\n", substr($0, 3, length($0)) next } { print $0 } ' } generate() { local cmd="$1" local ronn="man/hub-${cmd}.1.ronn" local text="$(hub_help "$cmd")" [ -n "$text" ] || continue { echo "hub-${cmd}(1) -- $(para == 2 <<<"$text" | format_shortdesc)" echo "===" echo echo "## SYNOPSIS" echo para == 1 <<<"$text" | format_synopsis echo para '>=' 3 <<<"$text" | format_rest } > "$ronn" bin/ronn --roff --organization=GITHUB --manual="Hub Manual" "$ronn" >/dev/null } script/build case "$1" in * ) for cmd in ${1:-$commands $extensions}; do generate "$cmd" done ;; esac