git9 @ 7c5c8a7e0a33a2c83860dc9dcb2dcf3d6c23b2e4
#!/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] 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 * 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 `$nl{cd $gitroot/.git/refs/ && walk -f}) echo `{cat $gitroot/.git/refs/$b} refs/$b } 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_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 usage{ echo 'git <command> <args>' >[1=2] exit usage } fn die { >[1=2] echo git $_cmdname: $* exit $_cmdname: $* } _cmdname=$1 if(~ $0 *compat){ ramfs -m /n/gitcompat touch /n/gitcompat/git bind $0 /n/gitcompat/git path=( /n/gitcompat $path ) exec rc } if(! test -f '/env/fn#cmd_'$1) die git $1: commmand not implemented if(! ~ $1 init && ! ~ $1 clone) gitroot=`{git/conf -r} || die repo echo $* >/tmp/gitlog cmd_$1 $*(2-) exit ''