view .shell.d/50.hg_functions.sh @ 378:20e47bc8eea9

hgrc: disable hg-git and hgsubversion It hasn't been common for me to use either of these extensions for some time, so just drop both of them from the main hgrc. Instead I'll enable them as-needed in individual repositories.
author Augie Fackler <durin42@gmail.com>
date Thu, 09 Jun 2011 20:20:04 -0500
parents fc89d315942f
children
line wrap: on
line source

## 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')"
}
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
    fi
    if [ "$1" = "tip" ] ; then
        echo 'abort: tip is essentially never what you mean here'
        return 2
    fi
    marks=$(hg book | sed 's/^ \*/  /' | awk '{ print $1 }')
    if [ "$marks" = "no bookmarks set" ] ; then
      echo "no bookmarks set, nothing to rebase"
    fi
    for b in $(echo $marks) ; do
        echo "About to rebase $b"
        out=$(hg rebase -d "$1" -b "$b")
        code=$?
        echo $out | grep "nothing to rebase"
        if [ $? = 0 ] ; then
            echo 'moving on'
        else
            if [ $code -ne 0 ] ; then
                echo "rebase exited with status $out"
                return 3
            fi
        fi
    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