hgeditor
author Bryan O'Sullivan <bos@serpentine.com>
Fri, 29 Jul 2005 08:49:01 -0800
changeset 810 790a0ff306f2
parent 769 0c033ef053ab
child 796 33a272b79e54
child 808 8f5637f0a0c0
child 814 0902ffece4b4
permissions -rwxr-xr-x
Move commands.forget over to using new walk code. With no names, it now recursively forgets everything, as is the default behaviour of other commands. And prints the names of all files it hasn't specifically been told to forget.

#!/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

T1=""; T2=""
cleanup_exit() {
    rm -f "$T1" "$T2"
    exit $1
}

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

# Remove temporary files even if we get interrupted
trap "cleanup_exit 255" TERM KILL INT QUIT ABRT
T1=`mktemp`; T2=`mktemp`
(
    cd "`hg root`"
    grep '^HG: changed' "$1" | cut -b 13- | while read changed; do
        hg diff "$changed" >> "$T2"
    done
)

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

CHECKSUM=`md5sum "$T1"`
$EDITOR "$T1" "$T2" || cleanup_exit $?
echo "$CHECKSUM" | md5sum -c >/dev/null 2>&1 && cleanup_exit 13

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

cleanup_exit $?