ref: dfb4b522830edab8f3856289d326d6cf5e930644
dir: /sys/src/cmd/git/compat/
#!/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=$1 if(~ $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 2 if(~ $1 -c*) shift 1 if(! test -f '/env/fn#cmd_'$1) die git $1: commmand not implemented if(! ~ $1 init && ! ~ $1 clone) gitroot=`{git/conf -r} || die repo if(~ $#gitcompatdebug 1) cmd_$1 $*(2-) | tee >>/tmp/gitlog if not cmd_$1 $*(2-) exit ''