gitman

Export manpages from git repositories
git clone git://jacobedwards.org/gitman
Log | Files | Refs | README | LICENSE

gitman (1661B)


      1 #!/bin/sh
      2 #
      3 # Copyright (c) 2025 Jacob R. Edwards <jacob@jacobedwards.org>
      4 #
      5 # Permission to use, copy, modify, and distribute this software for any
      6 # purpose with or without fee is hereby granted, provided that the above
      7 # copyright notice and this permission notice appear in all copies.
      8 #
      9 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     12 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     15 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     16 
     17 set -e
     18 
     19 while test $# -gt 0
     20 do
     21 	case "$1" in
     22 	(-d) prefix="${2:?-d requires an argument}"; shift ;;
     23 	(-*) echo 'usage: gitman [-d dir] [repo ...]' 1>&2; exit 1 ;;
     24 	(--) shift; break ;;
     25 	(*) break ;;
     26 	esac
     27 	shift
     28 done
     29 
     30 if test -z "$prefix"; then
     31 	if test -e /etc/gitman; then
     32 		prefix="$(</etc/gitman)"
     33 	else
     34 		prefix=.
     35 	fi
     36 fi
     37 
     38 gitls() {
     39 	git ls-tree --full-tree -r HEAD
     40 }
     41 
     42 gitman() {
     43 	s="${1##*.}"
     44 	sprefix="$2"/man$s
     45 	mkdir -p "$sprefix"
     46 	name="$(basename "$1")"
     47 	path="$sprefix"/"$name"
     48 	git show HEAD:"$1" > "$path"
     49 	echo "$path"
     50 }
     51 
     52 case "$(uname)" in
     53 (OpenBSD) makewhatis() { command makewhatis -d "$prefix" "$@" ;} ;;
     54 esac
     55 
     56 pages="$(
     57 	for d in "${@:-"${GIT_DIR:?No repositories given}"}"
     58 	do
     59 		GIT_DIR="$d"
     60 		export GIT_DIR
     61 		for f in $(gitls | awk '/\.[0-9]$/ { print $NF }')
     62 		do
     63 			gitman "$f" "$prefix"
     64 		done
     65 	done
     66 )"
     67 IFS='
     68 '
     69 makewhatis $pages
     70 echo "$pages"