228 lines · 3.2 KB · Text
RawDownload
#!/bin/rc rfork e opts=()args=()nl='' fn cmd_init{	while(! ~ $#* 0){		switch($1){		case --bare			# ignore		case -- 			# go likes to use these		case -*			die unknown command init $*		case *			args=($args $1)		}		shift	}	git/init $opts $args} fn cmd_clone{	branch=()	while( ! ~ $#* 0){		switch($1){		case -b			branch=$2			shift		case --			# go likes to use these		case -*			die unknown command clone $*		case *			args=($args $1)		}		shift	}	git/clone $opts $args	if(~ $#branch 1)		git/branch -n -b $1 origin/$1} fn cmd_pull{	if(~ $1 -*)		die unknown options for pull $*	git/pull} fn cmd_fetch{	while(~ $#* 0){		switch($1){		case --all			opts=($opts -a)		case -f			opts=($opts -u $2)			shift		case -- 			# go likes to use these		case -*			die unknown command clone $*		case *			args=($args $1)		}		shift	}		git/pull -f $opts}  fn cmd_checkout{	if(~ $1 -*)		die unknown command pull $*	if(~ $#* 0)		die git checkout branch	git/branch $b} fn cmd_submodule {	if(test -f .gitmodules)		die 'submodules unsupported'} fn cmd_rev-parse{	while(~ $1 -*){		switch($1){		case --git-dir			echo $gitroot/.git			shift		case --abbrev-ref			echo `{dcmd git9/branch | sed s@^heads/@@g}			shift		case *			die unknown option $opt		}		shift	}} fn cmd_show-ref{	if(~ $1 -*)		die unknown command pull $*	filter=cat	if(~ $#* 0)		filter=cat	if not		filter='-e(^|/)'^$*^'$'	for(b in `$nl{cd $gitroot/.git/refs/ && walk -f})		echo `{cat $gitroot/.git/refs/$b} refs/$b } fn cmd_rev-parse{	switch($1){	case --git-dir		echo `{git/conf -r}^/.git	case *		die 'unknown rev-parse '$*	}} fn cmd_remote{	if({! ~ $#* 3 && ! ~ $#* 4} || ! ~ $1 add)		die unimplemented remote cmd $*	name=$2	url=$3	if(~ $3 '--')		url=$4	>>$gitroot/.git/config{		echo '[remote "'$name'"]'		echo '	url='$url	}} fn cmd_log{	count=()	format=''	while(~ $1 -*){		switch($1){		case --format			format=$2			shift		case '--format='*			format=`{echo $1 | sed 's/--format=//g'}		case -n			count=-n$2			shift		case -n*			count=$1		case *			dprint option $opt		}		shift	}	@{cd $gitroot && git/fs}	switch($format){	case ''		git/log $count	case '%H:%ct'		for(c in `{git/log -s $count| awk '{print $1}'})			echo $c:`{mtime $gitroot/.git/fs/object/$c/msg}	case '%h %cd'		for(c in `{git/log -s $count| awk '{print $1}'})			echo $c `{date `{mtime $gitroot/.git/fs/object/$c/msg}}	} } fn cmd_show{	cmd_log -n1 $*} fn cmd_ls-remote{	if(~ $1 -q)		shift	remote=`$nl{git/conf 'remote "'$1'".url'}	if(~ $#remote 0)		remote=$1	git/get -l $remote | awk '/^remote/{print $3"\t"$2}'} fn cmd_version{	echo git version 2.2.0} fn cmd_status{	echo} fn usage{	echo 'git <command> <args>' >[1=2]	exit usage} fn die {	>[1=2] echo git $_cmdname: $*	exit $_cmdname: $*} _cmdname=$1if(~ $0 *compat){	ramfs -m /n/gitcompat	touch /n/gitcompat/git	bind $0 /n/gitcompat/git	path=( /n/gitcompat $path )	exec rc} if(~ $#gitcompatdebug 1)	echo running  $* >>/tmp/gitlog if(~ $1 -c)	shift 2if(~ $1 -c*)	shift 1if(! test -f '/env/fn#cmd_'$1)	die git $1: commmand not implementedif(! ~ $1 init && ! ~ $1 clone)	gitroot=`{git/conf -r} || die repo if(~ $#gitcompatdebug 1)	cmd_$1 $*(2-) | tee >>/tmp/gitlogif not	cmd_$1 $*(2-)exit ''