# HG changeset patch # User Augie Fackler # Date 1350480088 18000 # Node ID 142fb39e4e550ae3b25ec3e280499abe218c3e7c # Parent 7a99481ab8888121ab83b850ca0972f703b7f4cd hg-rebase-all: correctly use rebase result code Exit status 1 can mean "nothing to rebase", which isn't helpful for our case. Added a slight tangle of if statements to work around that. diff --git a/.shell.d/50.hg_functions.sh b/.shell.d/50.hg_functions.sh --- a/.shell.d/50.hg_functions.sh +++ b/.shell.d/50.hg_functions.sh @@ -15,16 +15,27 @@ alias mq-snapshot=mq_snapshot function hg_rebase_all () { hg sum | egrep 'commit: .*\(clean\)$' || (echo 'abort: wc not clean' ; return 1) || return 1 if [ "x$1" = "x" ] ; then - echo 'abort: give destination for rebase' - return 2 + echo 'abort: give destination for rebase' + return 2 fi if [ "$1" = "tip" ] ; then - echo 'abort: tip is essentially never what you mean here' - return 2 + echo 'abort: tip is essentially never what you mean here' + return 2 fi for b in $(hg book | sed 's/^ \*/ /' | awk '{ print $1 }') ; do - hg co --clean $b - hg rebase -d "$1" + echo "About to rebase $b" + hg co --clean $b + out=$(hg rebase -d "$1") + code=$? + grep "nothing to rebase" <(echo $out) + if [ $? = 0 ] ; then + echo 'moving on' + else + if [ $out -ne 0 ] ; then + echo "rebase exited with status $out" + return 3 + fi + fi done } alias hg-rebase-all=hg_rebase_all @@ -45,18 +56,18 @@ alias hg-svn-merge-branch=hgsvnmergebran function hgsvnrebaseall() { for b in `hg log -u 'Augie Fackler ' --template '{branches}\n' | sort | uniq` do - echo "rebase $b" - hg co $b - if [[ "$?" != "0" ]] ; then - echo "abort: could not checkout $b" - return - fi - hg parent --svn > /dev/null - if [[ "$?" == "0" ]] ; then - hg rebase --svn || return - else - echo "Skip $b since it has a merge." - fi + echo "rebase $b" + hg co $b + if [[ "$?" != "0" ]] ; then + echo "abort: could not checkout $b" + return + fi + hg parent --svn > /dev/null + if [[ "$?" == "0" ]] ; then + hg rebase --svn || return + else + echo "Skip $b since it has a merge." + fi done } alias hg-svn-rebase-all=hgsvnrebaseall @@ -79,22 +90,22 @@ function hgsvnmkbranch() { upstream=$(hg paths default | sed 's%/*$%%') local branchname if [ "x$1" = "x" ] ; then - echo 'Must provide new branch name.' - return 1 + echo 'Must provide new branch name.' + return 1 fi local d=`hg svn info | grep URL | sed 's/.*://'` local br=`echo $d | awk '{ - if ( index($1, "trunk") ) { - print "trunk" - } else { - x = index($1, "branches") ; - if ( x != 0 ) { - sub(".*/branches/", ""); - sub("/.*", ""); - print $0 - } - } - }'` + if ( index($1, "trunk") ) { + print "trunk" + } else { + x = index($1, "branches") ; + if ( x != 0 ) { + sub(".*/branches/", ""); + sub("/.*", ""); + print $0 + } + } + }'` branchname=$br echo svn cp $upstream/$branchname $upstream/branches/$1