view hgeditor @ 1484:840808c57969

zsh completion improvements. File completers now correctly deal with filenames that contain spaces. The completers also use 'hg status .' so they'll work correctly when the default behaviour changes.
author Steve Borho <steve@borho.org>
date Mon, 31 Oct 2005 09:58:05 -0800
parents 1bc619b12025
children f93fde8f5027
line wrap: on
line source

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