From fc09731a8e44d7c3f0978094393a2c4d9ea39a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 25 Jan 2016 00:40:02 +1100 Subject: [PATCH] Add `script/man` to generate individual man pages --- commands/help.go | 2 +- script/bootstrap | 2 +- script/man | 104 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100755 script/man diff --git a/commands/help.go b/commands/help.go index f7f29b02..94bf21d8 100644 --- a/commands/help.go +++ b/commands/help.go @@ -51,7 +51,7 @@ func runHelp(helpCmd *Command, args *Args) { if c := lookupCmd(command); c != nil { manProgram, err := utils.CommandPath("man") - if err == nil { + if err == nil && !args.HasFlags("--plain-text") { man := cmd.New(manProgram) manPage := "hub-" + c.Name() manFile, err := localManPage(manPage, args) diff --git a/script/bootstrap b/script/bootstrap index 1edc156d..09c71b0d 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -24,7 +24,7 @@ fi { ruby --version bundle install --path vendor/bundle - bundle binstub rake cucumber + bundle binstub rake cucumber ronn } || { echo "You need Ruby 1.9 or higher and Bundler to run hub tests" >&2 STATUS=1 diff --git a/script/man b/script/man new file mode 100755 index 00000000..8e2de19c --- /dev/null +++ b/script/man @@ -0,0 +1,104 @@ +#!/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 -- GitLab