hgeditor
author Bryan O'Sullivan <bos@serpentine.com>
Sun, 10 Jul 2005 16:14:06 -0800
changeset 671 efa4a7e2f322
parent 666 0100a43788ca
child 682 d6723636c172
permissions -rwxr-xr-x
Move hgrc documentation out to its own man page, hgrc(5). # HG changeset patch # User Bryan O'Sullivan <bos@serpentine.com> # Node ID 5076cf1fd6a1b8eb410e5e03cb004ca6a52a30f9 # Parent 7369ec5d93f2ffd490a43970edd9adf8d2bbe269 Move hgrc documentation out to its own man page, hgrc(5). The new man page expands on the existing documentation by describing the file format and the purpose of each section and field.

#!/bin/sh
#
# This is an example of using HGEDITOR to automate the signing of
# commits and so on.

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

if grep -q "^HG: merge resolve" "$1" ; then
    # we don't sign merges
    exec $EDITOR "$1"
else
    # Remove temporary files even if we get interrupted
    trap "cleanup_exit 255" TERM KILL INT QUIT ABRT
    T1=`mktemp`; T2=`mktemp`

    # Add manifest hash in order to sign whole repository state.
    # Remove HG: prefix, as we want that to be stored.
    grep '^HG: manifest hash' "$1" | cut -b 5- >> "$T1"
    # Add all other state information
    grep -v '^HG: manifest hash' "$1" >> "$T1"
    (
        cd "`hg root`"
        grep '^HG: changed' "$1" | cut -b 13- | while read changed; do
            hg diff "$changed" >> "$T2"
        done
    )

    CHECKSUM=`md5sum "$T1"`
    $EDITOR "$T1" "$T2" || cleanup_exit $?
    echo "$CHECKSUM" | md5sum -c --status && cleanup_exit 13
    {
        head -n 1 "$T1"
        echo
        grep -v "^HG:" "$T1" | gpg -t -a -u "${HGUSER}" --clearsign
    } > "$T2" && mv "$T2" "$1"
    cleanup_exit $?
fi