diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -14,11 +14,11 @@ INSTALL?=install SCRIPT= commit-id tree-id parent-id cg-add cg-admin-lsobj cg-admin-uncommit \ cg-branch-add cg-branch-ls cg-reset cg-clone cg-commit cg-diff \ cg-export cg-help cg-init cg-log cg-merge cg-mkpatch cg-patch \ cg-pull cg-restore cg-rm cg-seek cg-status cg-tag cg-tag-ls cg-update \ - cg cg-admin-ls cg-push cg-branch-chg + cg cg-admin-ls cg-push cg-branch-chg cg-cat LIB_SCRIPT=cg-Xlib cg-Xmergefile cg-Xnormid GEN_SCRIPT= cg-version diff --git a/cg-cat b/cg-cat new file mode 100755 --- /dev/null +++ b/cg-cat @@ -0,0 +1,42 @@ +#!/bin/sh +# +# Cat a file(s) by filename from a GIT repository. + +# Initiated from a request from: erg@research.att.com +# for an equivalent to "cvs co -p " +# Question posted with really bad initial solution: ellson@research.att.com +# Suggestions offered by: Johannes.Schindelin@gmx.de +# rene.scharfe@lsrfire.ath.cx +# This solution based on posting from: torvalds@osdl.org +# Polish and test by: ellson@research.att.com + +USAGE="cg-cat [-r rev] FILE" + +. ${COGITO_LIB}cg-Xlib + +default=HEAD +while optparse; do + if optparse -r; then + default="$OPTARG" + else + optfail + fi +done + +[ "$ARGS" ] || usage + +git-ls-tree $(git-rev-parse --default $default "${ARGS[@]}") | + while read mode type sha name + do + case "$type" in + blob) + git-cat-file blob "$sha" + ;; + tree) + git-ls-tree "$sha" + ;; + *) + exit 1 + ;; + esac + done