Fix walk code for files that do not exist anywhere, and unhandled types.
Prior to this, a file that did not exist was reported as showing up in
the filesystem, as were files of unsupported types (such as fifos).
Now, an error message is printed and nothing is returned in such cases.
This change also moves the commands.pathto function to the util module,
as the walk code needs it to print non-confusing error messages.
#!/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"`
$EDITOR "$HGTMP/msg" "$HGTMP/diff" || exit $?
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 $?