Adapt commit to use file matching code.
The code is slightly complicated by the need to commit all outstanding
changes in the repository if no file names are given (other commands
operate on the current directory and its subdirectories in this case).
localrepository.changes has acquired an optional match parameter, to let
it filter out include/exclude options.
#!/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 $?