Fix dirstate.changes for ignored directories.
Do a second walking pass to examine any leftover files in the dirstate
map that are in the .hgignore file but match our search criteria.
This fixes the case of entire directories never being examined due to
their presence in the .hgignore file, and should hopefully not add any
significant overhead.
#!/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 $?