hgmerge
author Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
Tue, 21 Feb 2006 15:48:12 -0600
changeset 1771 e22bbca2e82b
parent 1770 4eea6a747c27
child 1772 b1a7fd503a29
permissions -rwxr-xr-x
hgmerge: add and use ask_if_merged function This patch, unlike the earlier ones, doesn't use unportable select builtin.
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: 306
diff changeset
     1
#!/bin/sh
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     2
#
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     3
# hgmerge - default merge helper for Mercurial
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     4
#
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     5
# This tries to find a way to do three-way merge on the current system.
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     6
# The result ought to end up in $1.
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     7
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     8
set -e # bail out quickly on failure
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
     9
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
    10
LOCAL="$1"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
    11
BASE="$2"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
    12
OTHER="$3"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
    13
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
    14
if [ -z "$EDITOR" ]; then
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
    15
    EDITOR="vi"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
    16
fi
304
38fb7d23b78d Use vi if $EDITOR is unset.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 303
diff changeset
    17
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
    18
# find decent versions of our utilities, insisting on the GNU versions where we
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
    19
# need to
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    20
MERGE="merge"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    21
DIFF3="gdiff3"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    22
DIFF="gdiff"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    23
PATCH="gpatch"
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
    24
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    25
type "$MERGE" >/dev/null 2>&1 || MERGE=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    26
type "$DIFF3" >/dev/null 2>&1 || DIFF3="diff3"
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
    27
$DIFF3 --version >/dev/null 2>&1 || DIFF3=
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    28
type "$DIFF"  >/dev/null 2>&1 || DIFF="diff"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    29
type "$DIFF"  >/dev/null 2>&1 || DIFF=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    30
type "$PATCH" >/dev/null 2>&1 || PATCH="patch"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    31
type "$PATCH" >/dev/null 2>&1 || PATCH=
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
    32
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
    33
# find optional visual utilities
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    34
FILEMERGE="/Developer/Applications/Utilities/FileMerge.app/Contents/MacOS/FileMerge"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    35
KDIFF3="kdiff3"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    36
TKDIFF="tkdiff"
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
    37
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    38
type "$FILEMERGE" >/dev/null 2>&1 || FILEMERGE=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    39
type "$KDIFF3"    >/dev/null 2>&1 || KDIFF3=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    40
type "$TKDIFF"    >/dev/null 2>&1 || TKDIFF=
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
    41
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    42
# random part of names
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    43
RAND="$RANDOM$RANDOM"
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    44
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    45
# temporary directory for diff+patch merge
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    46
HGTMP="${TMPDIR-'/tmp'}/hgmerge.$RAND"
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    47
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    48
# backup file
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    49
BACKUP="$LOCAL.orig.$RAND"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    50
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    51
# file used to test for file change
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    52
CHGTEST="$LOCAL.chg.$RAND"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    53
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    54
# put all your required cleanup here
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    55
cleanup() {
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    56
    rm -f "$BACKUP" "$CHGTEST"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    57
    rm -rf "$HGTMP"
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    58
}
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    59
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    60
# functions concerning program exit
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    61
success() {
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    62
    cleanup
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    63
    exit 0
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    64
}
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    65
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    66
failure() {
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    67
    echo "merge failed" 1>&2
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    68
    mv "$BACKUP" "$LOCAL"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    69
    cleanup
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    70
    exit 1
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    71
}
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    72
1771
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    73
# Ask if the merge was successful
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    74
ask_if_merged() {
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    75
    while 1; do
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    76
        echo "$LOCAL seems unchanged. Was the merge successful? [y/n]"
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    77
        read answer
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    78
        case answer in
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    79
            y*|Y*) success;;
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    80
            n*|N*) failure;;
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    81
        esac
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    82
    done
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    83
}
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
    84
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    85
# Clean up when interrupted
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    86
trap "failure" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
    87
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    88
# Back up our file (and try hard to keep the mtime unchanged)
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    89
mv "$LOCAL" "$BACKUP"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
    90
cp "$BACKUP" "$LOCAL"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
    91
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
    92
# Attempt to do a non-interactive merge
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    93
if [ -n "$MERGE" -o -n "$DIFF3" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    94
    if [ -n "$MERGE" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    95
        $MERGE "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && success
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    96
    elif [ -n "$DIFF3" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    97
        $DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" && success
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    98
    fi
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
    99
    if [ $? -gt 1 ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   100
        echo "automatic merge failed! Exiting." 1>&2
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
   101
        failure
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   102
    fi
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   103
fi
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   104
cp "$BACKUP" "$LOCAL"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   105
1664
4338e33c973b Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents: 1647
diff changeset
   106
# on MacOS X try FileMerge.app, shipped with Apple's developer tools
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
   107
if [ -n "$FILEMERGE" ]; then
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
   108
    cp "$BACKUP" "$LOCAL"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
   109
    cp "$BACKUP" "$CHGTEST"
1664
4338e33c973b Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents: 1647
diff changeset
   110
    # filemerge prefers the right by default
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
   111
    $FILEMERGE -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
   112
    [ $? -ne 0 ] && echo "FileMerge failed to launch" && failure
1771
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
   113
    test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
   114
    failure
1647
64a1169c927d Use of opendiff as merge program on MacOS X
Christian Ebert <blacktrash@gmx.net>
parents: 1434
diff changeset
   115
fi
64a1169c927d Use of opendiff as merge program on MacOS X
Christian Ebert <blacktrash@gmx.net>
parents: 1434
diff changeset
   116
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
   117
if [ -n "$DISPLAY" ]; then
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
   118
    # try using kdiff3, which is fairly nice
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
   119
    if [ -n "$KDIFF3" ]; then
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   120
        $KDIFF3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" || failure
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   121
        success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   122
    fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   123
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
   124
    # try using tkdiff, which is a bit less sophisticated
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
   125
    if [ -n "$TKDIFF" ]; then
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   126
        $TKDIFF "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" || failure
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   127
        success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   128
    fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   129
fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   130
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   131
# Attempt to do a merge with $EDITOR
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
   132
if [ -n "$MERGE" ]; then
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   133
    echo "conflicts detected in $LOCAL"
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
   134
    $MERGE "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
   135
    success
242
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
   136
fi
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
   137
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   138
if [ -n "$DIFF3" ]; then
242
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
   139
    echo "conflicts detected in $LOCAL"
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
   140
    $DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" || {
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   141
        case $? in
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   142
            1)
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   143
                $EDITOR "$LOCAL" ;;
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   144
            2)  echo "$DIFF3 failed! Exiting." 1>&2
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
   145
                cp "$BACKUP" "$LOCAL"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
   146
                failure ;;
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   147
        esac
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
   148
        success
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   149
    }
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   150
fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   151
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   152
# attempt to manually merge with diff and patch
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   153
if [ -n "$DIFF" -a -n "$PATCH" ]; then
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
   154
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
   155
    (umask 077 && mkdir "$HGTMP") || {
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   156
        echo "Could not create temporary directory $HGTMP" 1>&2
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   157
        failure
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
   158
    }
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
   159
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   160
    $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || :
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
   161
    if $PATCH "$LOCAL" < "$HGTMP/diff"; then
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   162
        success
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
   163
    else
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   164
        # If rejects are empty after using the editor, merge was ok
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
   165
        $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   166
    fi
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
   167
    failure
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   168
fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   169
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
   170
echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
   171
failure