git/list[1] front-page[2] threads[3] people[4] search[5] about
 

"git cat" and "git ls"

From
SBSanti Béjar <sbejar@gmail.com>
Date
Jan 18, 2006, 15:10 UTC
Message-ID
<87irsh6087.fsf@gmail.com>
Hello,
        following the "git diff" wrapper I've done two new wrappers:
git cat: USAGE='<tag|commit|blob> | [<ent>|-1|-2|-3] -- <file>'
    It shows the content of the giventag/commit/blob.
    You can also ask for a file in a tree or in the index (stage
    optional).
git ls: USAGE='[<ent>] [--] <path>'
    It lists the files in <path> in the <ent> or in the index.
  Santi

#!/bin/sh #

USAGE='<tag|commit|blob> | [<ent>|-1|-2|-3] -- <file>' SUBDIRECTORY_OK='Yes' . git-sh-setup

rev=$(git-rev-parse --revs-only --no-flags --sq "$@") || exit flags=$(git-rev-parse --no-revs --flags "$@") files=$(git-rev-parse --no-revs --no-flags --sq "$@")

case "$rev,$files" in
?*' '?*,*|*,?*' '?*)
	usage
	;;
?*,?*)
	sha1=$(eval "git-ls-tree $rev $files" | cut -f 1 | cut -d " " -f 3)
	;;
?*,)
	sha1=$rev
	;;
,?*)
	# Only one file
	[ $(eval "git-ls-files $files | wc -l") != 1 ] && usage
	stg=0
	flag=${flags#-}
	case $flag in
	    1|2|3) stg=$flag;;
	esac
	sha1=$(eval "git-ls-files -s $files" | while read -r mode sha stage name ; do
		[ $stage -eq $stg ] && echo $sha && break ; done)
	;;
*)
	usage
	;;
esac

[ -z $sha1 ] && echo "$(basename $0): $files: Not found" && exit 1 type=$(eval "git-cat-file -t $sha1")

case $type in
    tree)
	usage
	;;
    tag|blob)
	cmd="git-cat-file $type $sha1"
	;;
    commit)
	cmd="git-rev-list --max-count=1 $sha1 --pretty=fuller"
	;;
esac

eval "$cmd" exit

#!/bin/sh #

USAGE='[<ent>] [--] <path>' SUBDIRECTORY_OK='Yes' . git-sh-setup

tree=$(git-rev-parse --verify $1^{tree} 2>/dev/null) [ -n "$tree" ] && shift files=$(git-rev-parse --no-revs --no-flags --sq "$@")

case "$tree" in
"")
        cmd="git-ls-files -s $files"
	;;
?*)
	cmd="git-ls-tree $tree $files"
	;;
esac

eval "$cmd" exit

Next: Junio C Hamano
Message 1 of 2 in “"git cat" and "git ls"”
  1. Santi BéjarJan 18, 2006
  2. Junio C HamanoJan 18, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.