view .shell.d/50.hg_functions.sh @ 336:ea73ef5dc38c

emacs: avoid weird package.el breakage with newish packages I've been toting around this package.el from 2009 or so, and something in the package format seems to have changed that broke me. Thanks to some related diagnostics by Lucas, I've grabbed the last package.el that worked with emacs 23 and stashed it here. This seems to work, modulo some things (notably js2-mode and smex) now seem to require emacs 24 if you install them using package.el, so this will end up being brittle on my last couple of emacs23 machines.
author Augie Fackler <raf@durin42.com>
date Thu, 29 May 2014 14:30:42 -0400
parents 2b129f63d910
children fc89d315942f
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"
        hg co --clean $b
        out=$(hg rebase -d "$1")
        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