hgeditor
author Bryan O'Sullivan <bos@serpentine.com>
Thu, 25 Aug 2005 02:00:03 -0700
changeset 1057 2fd15d743b3b
parent 1009 1bc619b12025
child 1599 f93fde8f5027
permissions -rwxr-xr-x
Add grep command. It currently searches all revs of every matching file. I'll change this soon so that it can still do this, but it will not be the default behaviour. Many options are unimplemented. There's only one output mode. Binary files are not handled yet.

#!/bin/sh
#
# This is an example of using HGEDITOR to automate the signing of
# commits and so on.

# change this to one to turn on GPG support
SIGN=0

# If you want to pass your favourite editor some other parameters
# only for Mercurial, modify this:
case "${EDITOR}" in
    "")
        EDITOR="vi"
        ;;
    emacs)
        EDITOR="$EDITOR -nw"
        ;;
    gvim|vim)
        EDITOR="$EDITOR -f -o"
        ;;
esac


HGTMP=""
cleanup_exit() {
    rm -rf "$HGTMP"
}

# Remove temporary files even if we get interrupted
trap "cleanup_exit" 0 # normal exit
trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM

HGTMP="${TMPDIR-/tmp}/hgeditor.$RANDOM.$RANDOM.$RANDOM.$$"
(umask 077 && mkdir "$HGTMP") || {
    echo "Could not create temporary directory! Exiting." 1>&2
    exit 1
}

(
    cd "`hg root`"
    grep '^HG: changed' "$1" | cut -b 13- | while read changed; do
        hg diff "$changed" >> "$HGTMP/diff"
    done
)

echo > "$HGTMP/msg"
if [ "$SIGN" == "1" ]; then
    MANIFEST=`grep '^HG: manifest hash' "$1" | cut -b 19-`
    echo -e "\nmanifest hash: $MANIFEST" >> "$HGTMP/msg"
fi
grep -vE '^(HG: manifest hash .*)?$' "$1" >> "$HGTMP/msg"

CHECKSUM=`md5sum "$HGTMP/msg"`
if [ -s "$HGTMP/diff" ]; then
    $EDITOR "$HGTMP/msg" "$HGTMP/diff" || exit $?
else
    $EDITOR "$HGTMP/msg" || exit $?
fi
echo "$CHECKSUM" | md5sum -c >/dev/null 2>&1 && exit 13

if [ "$SIGN" == "1" ]; then
    {
        head -n 1 "$HGTMP/msg"
        echo
        grep -v "^HG:" "$HGTMP/msg" | gpg -t -a -u "${HGUSER}" --clearsign
    } > "$HGTMP/msg.gpg" && mv "$HGTMP/msg.gpg" "$1"
else
    mv "$HGTMP/msg" "$1"
fi

exit $?