## hg_functions
# various hg utility functions

function mq () {
    ( wcroot ;
       hg -R .hg/patches $@
     )
}

function mq-snapshot () {
    mq ci -m "Applied on $(hg log -r qparent --template '{node|short}\n')"
}

function hg_rebase_all () {
    hg sum | grep 'commit: .* (clean)$' || (echo 'abort: wc not clean' ; return 1) || return 1
    if [ "x$1" = "x" ] ; then
	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
    fi
    for b in $(hg book | sed 's/^ \*/  /' | awk '{ print $1 }') ; do
	hg co --clean $b
	hg rebase -d "$1"
    done
}
alias hg-rebase-all=hg_rebase_all

function hgsvnmergebranch() {
    local targetrev
    local striprev
    targetrev=$(hg id | cut -d ' ' -f 1)
    hg merge $1
    hg ci -m "Merging $1"
    striprev=$(hg id | cut -d ' ' -f 1)
    hg co $targetrev
    hg diff -r$targetrev:$striprev | hg import - -m "Merged branch $1."
    hg strip $striprev
}
alias hg-svn-merge-branch=hgsvnmergebranch

function hgsvnrebaseall() {
    for b in `hg log -u 'Augie Fackler <durin42@gmail.com>' --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
    done
}
alias hg-svn-rebase-all=hgsvnrebaseall

function hgamend() {
    hg qimport -r . && hg qref && hg qfin qtip
}
alias hg-amend=hgamend

function hg_verify_all() {
  for x in $(find . -name '.hg') ; do
    y=$(dirname $x)
    echo $y
    hg verify -R $y
  done
}

function hgsvnmkbranch() {
    local upstream
    upstream=$(hg paths default | sed 's%/*$%%')
    local branchname
    if [ "x$1" = "x" ] ; then
	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
			}
		}
		}'`

    branchname=$br
    echo svn cp $upstream/$branchname $upstream/branches/$1
}
alias hg-svn-mkbranch=hgsvnmkbranch
