shithub: git9

ref: e43ded677ea2a176f637ce90a6fa1b2ec038d09b
dir: git9/compat

View raw version
#!/bin/rc

rfork e

opts=()
args=()

fn cmd_init{
	while(~ $#* 0){
		switch($1){
		case --bare
			opts=(-b)
		case -- 
			# go likes to use these
		case -*
			die unknown command init $*
		case *
			args=($args $1)
		}
		shift
	}
	ls >[1=2]
	/$cputype/bin/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
	}
	/$cputype/bin/git/clone $opts $args
	if(~ $#branch 1)
		/$cputype/bin/git/branch -n -b $1 origin/$1
}

fn cmd_pull{
	if(~ $1 -*)
		die unknown options for pull $*
	/$cputype/bin/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
	}	
	/$cputype/bin/git/pull -f $opts
}


fn cmd_checkout{
	if(~ $1 -*)
		die unknown command pull $*
	if(~ $#* 0)
		die git checkout branch
	/$cputype/bin/git/branch $b
}

fn 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 *
			dprint 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 `{cd $gitroot/.git/refs/ && walk -f})
		echo `{cat $gitroot/.git/refs/$b} refs/$b 
}

fn cmd_remote{
	if(! ~ $1 add)
		die unimplemented remote cmd $*
	>>$gitroot/.git/config{
		echo '[remote "'$2'"]'
		echo '	url='$3
	}
}

fn cmd_version{
	echo git version 2.2.0
}


fn usage{
	echo 'git <command> <args>' >[1=2]
	exit usage
}

fn die {
	>[1=2] echo $*
	exit boom
}

if(~ $0 *compat){
	ramfs -m /n/gitcompat
	cp $0 /n/gitcompat/git
	path=( /n/gitcompat $path )
	exec rc
}

if(! test -f '/env/fn#cmd_'$1){
	die git $1: commmand not implemented
}

gitroot=`{git/conf -r} || exit repo
cmd_$1 $*(2-)