X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~cjwatson/git?p=bin.git;a=blobdiff_plain;f=debman;h=5217f3a31f5eac5b57be22386c9ae0bdf03ff8c3;hp=25a5f1ac44fcf091d0dcf531b2c14a0cc6075109;hb=241d32c3a03c0004ff163d3cacdcbcc6cf7820d2;hpb=f6d0d20ca32c1052e4b4fb22da61eb3fcf258d48 diff --git a/debman b/debman index 25a5f1a..5217f3a 100755 --- a/debman +++ b/debman @@ -1,4 +1,4 @@ -#! /bin/sh -e +#! /bin/bash -e # debman - read a man page from an uninstalled Debian package file (.deb) @@ -19,20 +19,62 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. -USAGE='Usage: debman [man options] ...' +usage () { + if [ "$1" -eq 1 ]; then + FD=2 + else + FD=1 + fi + cat >&$FD < ... -case "$1" in - -h|--help) - echo "$USAGE" - exit 0 - ;; -esac +Options should be exactly one of: + -f package.deb read pages from package.deb archive + -p package download .deb for package and read pages + from there +EOF + exit "$1" +} -if test $# -lt 2; then - echo "$USAGE" >&2 - exit 1 +ARGS=`getopt -l help,filename:,package: -o hf:p: -n debman -- "$@"` +eval set -- "$ARGS" + +FILENAME= +PACKAGE= + +while :; do + case "$1" in + -h|--help) + usage 0 + ;; + -f|--filename) + FILENAME="$2" + shift 2 + ;; + -p|--package) + PACKAGE="$2" + shift 2 + ;; + --) + shift + break + ;; + *) + echo "debman: Internal error in option parsing" >&2 + exit 1 + ;; + esac +done + +if ( [ -n "$FILENAME" ] && [ -n "$PACKAGE" ] ) || \ + ( [ -z "$FILENAME" ] && [ -z "$PACKAGE" ] ); then + usage 1 +fi + +if test $# -lt 1; then + usage 1 fi - + # Directory names are duplicated with and without ./ in order to cope with # old .debs whose data.tar.gz components had a slightly different format. MANDIRS='usr/share/man usr/X11R6/man ./usr/share/man ./usr/X11R6/man' @@ -40,13 +82,22 @@ MANDIRS='usr/share/man usr/X11R6/man ./usr/share/man ./usr/X11R6/man' TEMPDIR=`mktemp -dt debman.XXXXXXXXXX` trap 'rm -rf "$TEMPDIR"' EXIT ERR HUP INT QUIT TERM +if [ -n "$PACKAGE" ]; then + (cd "$TEMPDIR" && debget "$PACKAGE") + # There should be at most one file in $TEMPDIR now. + FILENAME="`find \"$TEMPDIR\" -name \*.deb -print`" + if [ -z "$FILENAME" ]; then + echo "Failed to fetch package $PACKAGE; exiting." >&2 + exit 1 + fi +fi + # Ignore errors from tar (though not dpkg). They'll generally just be of the # form "tar: usr/share/man: Not found in archive". If they're something # else, then man will fail to find the page anyway. -dpkg --fsys-tarfile "$1" | \ +dpkg --fsys-tarfile "$FILENAME" | \ (tar -C "$TEMPDIR" -xf - $MANDIRS 2>/dev/null || true) -shift MANPATH="$TEMPDIR/usr/share/man:$TEMPDIR/usr/X11R6/man" man "$@"