Fix undo after aborted commit bug
Commit would overwrite undo.dirstate unconditionally, so an undo after
an aborted commit would restore the dirstate from the aborted commit
and not the prior transaction.
This copies dirstate to journal.dirstate and moves it after a
successful transaction.
#!/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 $?