hgeditor
author Vadim Gelfer <vadim.gelfer@gmail.com>
Thu, 18 May 2006 13:48:12 -0700
changeset 2309 b2f37c7026ca
parent 1706 20b621154e17
child 3022 d9b8d28c0b94
permissions -rwxr-xr-x
remove: rewrite to be ~400x faster, bit more friendly old remove code called localrepo.changes for each file. was very expensive: $ hg --time rm arch>/dev/null Time: real 1066.120 secs (user 1014.450+0.000 sys 18.090+0.000) new code, same files: $ hg --time rm arch>/dev/null Time: real 2.770 secs (user 2.190+0.000 sys 0.580+0.000) also mention "-f" if not removing files. also allow "-f" to forget added files. make test a bit better.

#!/bin/sh
#
# This is an example of using HGEDITOR to create of diff to review the
# changes while commiting.

# 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
}

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

cat "$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

mv "$HGTMP/msg" "$1"

exit $?