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"