scripts/hgeditor
changeset 19 5b37cf0009bd
equal deleted inserted replaced
18:e4dd40cccc2a 19:5b37cf0009bd
       
     1 #!/bin/sh
       
     2 #
       
     3 # This is an example of using HGEDITOR to create of diff to review the
       
     4 # changes while commiting.
       
     5 
       
     6 # If you want to pass your favourite editor some other parameters
       
     7 # only for Mercurial, modify this:
       
     8 case "${EDITOR}" in
       
     9     "")
       
    10         EDITOR="vi"
       
    11         ;;
       
    12     emacs)
       
    13         EDITOR="$EDITOR -nw"
       
    14         ;;
       
    15     gvim|vim)
       
    16         EDITOR="$EDITOR -f -o"
       
    17         ;;
       
    18 esac
       
    19 
       
    20 
       
    21 HGTMP=""
       
    22 cleanup_exit() {
       
    23     rm -rf "$HGTMP"
       
    24 }
       
    25 
       
    26 # Remove temporary files even if we get interrupted
       
    27 trap "cleanup_exit" 0 # normal exit
       
    28 trap "exit 255" HUP INT QUIT ABRT TERM
       
    29 
       
    30 HGTMP=$(mktemp -d ${TMPDIR-/tmp}/hgeditor.XXXXXX)
       
    31 [ x$HGTMP != x -a -d $HGTMP ] || {
       
    32   echo "Could not create temporary directory! Exiting." 1>&2
       
    33   exit 1
       
    34 }
       
    35 
       
    36 (
       
    37     grep '^HG: changed' "$1" | cut -b 13- | while read changed; do
       
    38         "$HG" diff "$changed" >> "$HGTMP/diff"
       
    39     done
       
    40 )
       
    41 
       
    42 cat "$1" > "$HGTMP/msg"
       
    43 
       
    44 MD5=$(which md5sum 2>/dev/null) || \
       
    45     MD5=$(which md5 2>/dev/null)
       
    46 [ -x "${MD5}" ] && CHECKSUM=`${MD5} "$HGTMP/msg"`
       
    47 if [ -s "$HGTMP/diff" ]; then
       
    48     $EDITOR "$HGTMP/msg" "$HGTMP/diff" || exit $?
       
    49 else
       
    50     $EDITOR "$HGTMP/msg" || exit $?
       
    51 fi
       
    52 [ -x "${MD5}" ] && (echo "$CHECKSUM" | ${MD5} -c >/dev/null 2>&1 && exit 13)
       
    53 
       
    54 mv "$HGTMP/msg" "$1"
       
    55 
       
    56 exit $?