ref: f8bf36dc99975ea582975096522f6acece3e4bf6
dir: /branch/
#!/bin/rc -e
rfork en
fn usage{
echo usage: $0 '[-b base] [-o origin] new
-b base: use "base" for branch (default: current branch)
-o origin: use "origin" for remote branch
new: name of new branch' >[1=2]
exit usage
}
if(! cd `{git/conf -r}){
exit 'not in git repository'
exit notgit
}
git/fs
nl='
'
stay=''
create=''
cur=`{awk '$1=="branch"{print $2}' < /mnt/git/ctl}
while(~ $1 -* && ! ~ $1 --){
switch($1){
case -c; create=true
case -s; stay=true
case -o; origin=$1
case *
usage
}
shift
}
if(~ $1 --) shift
if(~ $#* 0){
echo $cur
exit
}
if(! ~ $#* 1)
usage
new=$1
if(~ $create ''){
if(! test -e .git/refs/heads/$new){
echo branch $new: does not exist >[1=2]
exit exists
}
}
if not{
if(test -e .git/refs/heads/$new){
echo could not create $new: already exists >[1=2]
exit exists
}
branched=''
candidates=(.git/refs/$cur .git/refs/heads/$cur .git/refs/remotes/$cur .git/refs/remotes/*/$cur)
for(br in $candidates){
if(test -f $br){
echo 'creating new branch '$new
cp $br .git/refs/heads/$new
branched="ok"
}
}
if(~ $branched ''){
echo 'could not find branch '$cur >[1=2]
exit notfound
}
}
if(~ $stay ''){
rm -f `$nl{git/walk -cfT}
echo 'ref: refs/heads/'$new > .git/HEAD
tree=/mnt/git/HEAD/tree
@{builtin cd $tree && tar cif /fd/1 .} | @{tar xf /fd/0}
for(f in `$nl{walk -f $tree | sed 's@^'$tree'/*@@'}){
if(! ~ $#f 0){
idx=.git/index9/tracked/$f
mkdir -p `{basename -d $idx}
walk -eq $f > $idx
}
}
}