ref: b4721715066c1a28d0ef2b29b97652316959c101
dir: /push/
#!/bin/rc -e
rfork en
. /sys/lib/git/common.rc
usage='
git/push [-a] [-u upstream] [-b branch] [-r branch]
-a push all branches
-b push branch "branch" (default: current branch)
-r delete branch "branch" from upstream
-u push to remote "upstream" (default: origin)
'
gitup
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)
usage
if(~ $#remote 0)
remote=`{git/conf 'remote "'$upstream'".url'}
if(~ $#remote 0)
remote=$upstream
if(~ $#remote 0)
die 'no idea where to push'
if(~ $sendall '')
updates=`$nl{git/send $force -b $branch $remove $remote || die $status}
if not
updates=`$nl{git/send $force $remove -a $remote || die $status}
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'
}
}