78 lines · 1.3 KB · Text
RawDownload
#!/bin/rc rfork en nl='' if(! cd `{git/conf -r})	exit 'not in git repository' git/fsfn usage {	echo usage: $0 '[-a] [-u upstream] [-b branch] [-r rmbranch]	-a:		push all	-u upstream:	push to repo "upstream" (default: origin)	-b branch:	push branch "branch" (default: current branch)' >[1=2]	exit usage} remote=()sendall=''remove=()force=()upstream='origin'branch=`{awk '$1=="branch"{print $2}' < /mnt/git/ctl}while(~ $1 -*){	switch($1){	case -u		shift		upstream=$1	case -a		sendall=true	case -b		shift		branch=$1	case -r		shift		remove=(-r$1 $remove);	case -f		force=-f	case *		usage	}	shift} if(! ~ $#* 0)	usageif(~ $#remote 0)	remote=`{git/conf 'remote "'$upstream'".url'}if(~ $#remote 0)	remote=$upstreamif(~ $#remote 0){	echo 'no idea where to push'	exit upstream}if(~ $sendall '')	updates=`$nl{git/send $force -b $branch  $remove $remote}if not	updates=`$nl{git/send $force $remove -a $remote}x=$statusif(! ~ $x '')	exit $x for(ln in $updates){	u=`{echo $ln}	refpath=`{echo $u(2) | sed 's@^refs/heads/@.git/refs/remotes/@g'}	switch($u(1)){	case update;		echo $u(4) > $refpath		echo $u(2)^':' $u(3) '=>' $u(4)	case delete;		echo $u(2)^': removed'		rm -f $refpath	case uptodate;		echo $u(2)^': up to date'	}}