shithub: git9

ref: 3261c06c0233588e24887f1bbfc1b8dfd4c647f9
dir: /log/

View raw version
#!/bin/rc -e
rfork en
. /sys/lib/git/common.rc

usage='
	git/log [-e expr|-c commit] [-s] [file ...]
'

gitup

base=/mnt/git/object/
branch=`{git/branch}
expr=()
short=()
files=()
while(~ $1 -* && ! ~ $1 --){
	switch($1){
	case -c
		base=$2
		shift
	case -e
		expr=$2
		shift
	case -s
		short=true
	case *
		usage
	}
	shift
}
if(~ $1 --)
	shift
if(~ $#expr 0)
	commits=`{git/query $branch}
if not
	commits=`{git/query $expr}

if(! ~ $#* 0)
	files=`"{walk -f $gitrel/^$* | subst '^\./' | sort}

while(! ~ $#commits 0){
	ids=$nids
	show=()
	c=$commits(1)
	if(! ~ $#files 0){
		ncomm=`{comm -12 /env/files <{git/query -c $c~ $c | subst '^..' | sort} | wc -l}
		if(! ~ $ncomm 0)
			show=true
	}
	commits=$commits(2-)
	if(~ $#expr 0)
		commits=($commits `{cat $base/$c/parent >[2]/dev/null})
	if(! ~ $#commits 0)
		commits=`$nl{walk -emp -n0 $base^$commits | sort -rn | uniq | awk -F/ '{print $NF}'}

	if(~ $#files 0 || ~ $show true){
		if(~ $short true)
			echo $c `{cat $base/$c/msg | sed 1q}
		if not{
			echo -n 'Hash:	'`''{cat $base/$c/hash}
			echo -n 'Author:	'`''{cat $base/$c/author}
			echo -n 'Date:	'`''{date `{mtime $base/$c/msg | awk '{print $1}'}}
			subst -g '^' '	' <$base/$c/msg 
			echo
		}
	}
}
exit ''