hgeditor
author Bryan O'Sullivan <bos@serpentine.com>
Tue, 19 Jul 2005 07:15:59 -0800
changeset 726 809a870a0e73
parent 684 4ccf3de52989
child 754 3e73bf876f17
permissions -rwxr-xr-x
Add a source designator to the walk methods. If the source is 'f' (the filesystem), the file definitely exists in the filesystem. If 'm' (a rev or dirstate manifest), the file may not still exist with the given name.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
544
3d4d5f2aba9a Remove bashisms and use /bin/sh instead of /bin/bash.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 484
diff changeset
     1
#!/bin/sh
186
9a2075c0b9b8 Add $HGEDITOR hook and example script
mpm@selenic.com
parents:
diff changeset
     2
#
9a2075c0b9b8 Add $HGEDITOR hook and example script
mpm@selenic.com
parents:
diff changeset
     3
# This is an example of using HGEDITOR to automate the signing of
9a2075c0b9b8 Add $HGEDITOR hook and example script
mpm@selenic.com
parents:
diff changeset
     4
# commits and so on.
9a2075c0b9b8 Add $HGEDITOR hook and example script
mpm@selenic.com
parents:
diff changeset
     5
684
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
     6
# change this to one to turn on GPG support
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
     7
SIGN=0
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
     8
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
     9
T1=""; T2=""
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    10
cleanup_exit() {
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    11
    rm -f "$T1" "$T2"
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    12
    exit $1
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    13
}
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    14
666
0100a43788ca hgeditor: Remove EMAIL default for HGUSER, comment editor selection
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 665
diff changeset
    15
# If you want to pass your favourite editor some other parameters
0100a43788ca hgeditor: Remove EMAIL default for HGUSER, comment editor selection
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 665
diff changeset
    16
# only for Mercurial, modify this:
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    17
case "${EDITOR:=vi}" in
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    18
    emacs)
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    19
        EDITOR="$EDITOR -nw"
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    20
        ;;
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    21
    gvim|vim)
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    22
        EDITOR="$EDITOR -f -o"
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    23
        ;;
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    24
esac
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    25
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    26
if grep -q "^HG: merge resolve" "$1" ; then
186
9a2075c0b9b8 Add $HGEDITOR hook and example script
mpm@selenic.com
parents:
diff changeset
    27
    # we don't sign merges
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    28
    exec $EDITOR "$1"
186
9a2075c0b9b8 Add $HGEDITOR hook and example script
mpm@selenic.com
parents:
diff changeset
    29
else
665
40fd5722c669 hgeditor: Remove temporary files even if interrupted
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 664
diff changeset
    30
    # Remove temporary files even if we get interrupted
40fd5722c669 hgeditor: Remove temporary files even if interrupted
Radoslaw "AstralStorm" Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 664
diff changeset
    31
    trap "cleanup_exit 255" TERM KILL INT QUIT ABRT
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    32
    T1=`mktemp`; T2=`mktemp`
683
104d2aee3b44 Revert hgeditor change to manifest bits
Matt Mackall <mpm@selenic.com>
parents: 682
diff changeset
    33
    MANIFEST=`grep '^HG: manifest hash' "$1" | cut -b 19-`
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    34
683
104d2aee3b44 Revert hgeditor change to manifest bits
Matt Mackall <mpm@selenic.com>
parents: 682
diff changeset
    35
    echo -e "\n\nmanifest hash: $MANIFEST" >> "$T1"
104d2aee3b44 Revert hgeditor change to manifest bits
Matt Mackall <mpm@selenic.com>
parents: 682
diff changeset
    36
    grep -vE '^(HG: manifest hash .*)?$' "$1" >> "$T1"
475
ab53998b9dcd Fixed diff generation in hgeditor if a list of files is given to hg commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 350
diff changeset
    37
    (
ab53998b9dcd Fixed diff generation in hgeditor if a list of files is given to hg commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 350
diff changeset
    38
        cd "`hg root`"
ab53998b9dcd Fixed diff generation in hgeditor if a list of files is given to hg commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 350
diff changeset
    39
        grep '^HG: changed' "$1" | cut -b 13- | while read changed; do
ab53998b9dcd Fixed diff generation in hgeditor if a list of files is given to hg commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 350
diff changeset
    40
            hg diff "$changed" >> "$T2"
ab53998b9dcd Fixed diff generation in hgeditor if a list of files is given to hg commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 350
diff changeset
    41
        done
ab53998b9dcd Fixed diff generation in hgeditor if a list of files is given to hg commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 350
diff changeset
    42
    )
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    43
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    44
    CHECKSUM=`md5sum "$T1"`
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    45
    $EDITOR "$T1" "$T2" || cleanup_exit $?
684
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    46
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    47
    if [ "$SIGN" == "1" ] ; then
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    48
	echo "$CHECKSUM" | md5sum -c 2>/dev/null && cleanup_exit 13
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    49
	{
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    50
	    head -n 1 "$T1"
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    51
	    echo
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    52
	    grep -v "^HG:" "$T1" | gpg -t -a -u "${HGUSER}" --clearsign
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    53
	} > "$T2" && mv "$T2" "$1"
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    54
    else
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    55
	mv "$T1" "$1"
4ccf3de52989 Turn off signing with hgeditor by default
Matt Mackall <mpm@selenic.com>
parents: 683
diff changeset
    56
    fi
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    57
    cleanup_exit $?
186
9a2075c0b9b8 Add $HGEDITOR hook and example script
mpm@selenic.com
parents:
diff changeset
    58
fi
348
442eb02cf870 Improved hgeditor:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
    59