ref: abcaf09f9017a32492796142bf7d2d53f9c260d6
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 } } }