view hgeditor @ 812:b65af904d6d7

Reduce the amount of stat traffic generated by a walk. When we switched to the new walk code for commands, we no longer passed a list of specific files to the repo or dirstate walk or changes methods. This meant that we always walked and attempted to match everything, which was not efficient. Now, if we are given any patterns to match, or nothing at all, we still walk everything. But if we are given only file names that contain no glob characters, we only walk those.
author Bryan O'Sullivan <bos@serpentine.com>
date Fri, 29 Jul 2005 12:30:12 -0800
parents 0c033ef053ab
children 33a272b79e54 8f5637f0a0c0 0902ffece4b4
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

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 $?