##// END OF EJS Templates
Don't show the diff in hgeditor if there are no changes in file contents.
Don't show the diff in hgeditor if there are no changes in file contents.

File last commit:

r1009:1bc619b1 default
r1009:1bc619b1 default
Show More
hgeditor
71 lines | 1.6 KiB | text/plain | TextLexer
#!/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 $?