hgeditor
author Raphael Marmier <raphael@marmier.net>
Mon, 03 Jul 2006 10:18:46 -0700
changeset 2550 45235e492cc6
parent 1706 20b621154e17
child 3025 d9b8d28c0b94
permissions -rwxr-xr-x
Disable automatic line endings conversion on windows The rationale behind this is that such conversion implies a particular situation in which all files in the repo are terminated by only LF. This is documented nowhere and it bit me sharply when I upgraded. Furthermore, it works on the assumption that a file containing no NULL characters are actually a text file. Therefore it cannot guarantee that no binary file will be harmed in the process. Currently, if a file already contains CRLF line endings when it is copied to the working dir from the repo, then the version in the working dir will be corrupted by an extra CR. I'm working on a patch that will turn this into a warning. But as a side effect, committing such a file back will strip it from its CR. In all case, unrequested data modification can occur under the feet of the user, which is bad(tm), ihmo.

#!/bin/sh
#
# This is an example of using HGEDITOR to create of diff to review the
# changes while commiting.

# 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
}

(
    grep '^HG: changed' "$1" | cut -b 13- | while read changed; do
        hg diff "$changed" >> "$HGTMP/diff"
    done
)

cat "$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

mv "$HGTMP/msg" "$1"

exit $?