annotate hgmerge @ 1822:64df4220b349

copy/rename to a removed destination file When the destination of a copy or rename operation has been marked for removal, we need to restore it before we overwrite it with the new content. This also handles the case of idempotent renames, i.e. hg rename "a" "b" hg rename "b" "a"
author Robin Farine <robin.farine@terminus.org>
date Tue, 28 Feb 2006 23:47:40 -0800
parents d610fe0e6893
children 05c7d75be925
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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"
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
37 MELD="meld"
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
38
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
39 type "$FILEMERGE" >/dev/null 2>&1 || FILEMERGE=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
40 type "$KDIFF3" >/dev/null 2>&1 || KDIFF3=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
41 type "$TKDIFF" >/dev/null 2>&1 || TKDIFF=
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
42 type "$MELD" >/dev/null 2>&1 || MELD=
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
43
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
44 # random part of names
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
45 RAND="$RANDOM$RANDOM"
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
46
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
47 # temporary directory for diff+patch merge
1797
42f75cd04bf4 Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1774
diff changeset
48 HGTMP="${TMPDIR-/tmp}/hgmerge.$RAND"
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
49
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
50 # backup file
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
51 BACKUP="$LOCAL.orig.$RAND"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
52
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
53 # file used to test for file change
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
54 CHGTEST="$LOCAL.chg.$RAND"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
55
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
56 # put all your required cleanup here
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
57 cleanup() {
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
58 rm -f "$BACKUP" "$CHGTEST"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
59 rm -rf "$HGTMP"
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
60 }
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
61
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
62 # functions concerning program exit
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
63 success() {
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
64 cleanup
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
65 exit 0
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
66 }
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
67
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
68 failure() {
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
69 echo "merge failed" 1>&2
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
70 mv "$BACKUP" "$LOCAL"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
71 cleanup
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
72 exit 1
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
73 }
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
74
1771
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
75 # 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
76 ask_if_merged() {
1797
42f75cd04bf4 Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1774
diff changeset
77 while true; do
42f75cd04bf4 Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1774
diff changeset
78 echo "$LOCAL seems unchanged."
42f75cd04bf4 Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1774
diff changeset
79 echo "Was the merge successful? [y/n]"
1771
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
80 read answer
1797
42f75cd04bf4 Fix hgmerge: mkdir "'/tmp'/hgmerge..." and ask_if_merged() didn't work.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1774
diff changeset
81 case "$answer" in
1771
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
82 y*|Y*) success;;
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
83 n*|N*) failure;;
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
84 esac
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
85 done
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
86 }
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
87
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
88 # Clean up when interrupted
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
89 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
90
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
91 # 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
92 mv "$LOCAL" "$BACKUP"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
93 cp "$BACKUP" "$LOCAL"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
94
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
95 # 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
96 if [ -n "$MERGE" -o -n "$DIFF3" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
97 if [ -n "$MERGE" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
98 $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
99 elif [ -n "$DIFF3" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
100 $DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" && success
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
101 fi
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
102 if [ $? -gt 1 ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
103 echo "automatic merge failed! Exiting." 1>&2
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
104 failure
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
105 fi
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
106 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
107
1664
4338e33c973b Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents: 1647
diff changeset
108 # 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
109 if [ -n "$FILEMERGE" ]; then
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
110 cp "$BACKUP" "$LOCAL"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
111 cp "$BACKUP" "$CHGTEST"
1664
4338e33c973b Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents: 1647
diff changeset
112 # filemerge prefers the right by default
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
113 $FILEMERGE -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
114 [ $? -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
115 test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged
1647
64a1169c927d Use of opendiff as merge program on MacOS X
Christian Ebert <blacktrash@gmx.net>
parents: 1434
diff changeset
116 fi
64a1169c927d Use of opendiff as merge program on MacOS X
Christian Ebert <blacktrash@gmx.net>
parents: 1434
diff changeset
117
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
118 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
119 # 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
120 if [ -n "$KDIFF3" ]; then
1798
d610fe0e6893 hgmerge: do not use file with markers in tools merging themselves
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1797
diff changeset
121 $KDIFF3 --auto "$BASE" "$BACKUP" "$OTHER" -o "$LOCAL" || failure
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
122 success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
123 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
124
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
125 # 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
126 if [ -n "$TKDIFF" ]; then
1798
d610fe0e6893 hgmerge: do not use file with markers in tools merging themselves
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1797
diff changeset
127 $TKDIFF "$BACKUP" "$OTHER" -a "$BASE" -o "$LOCAL" || failure
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
128 success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
129 fi
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
130
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
131 if [ -n "$MELD" ]; then
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
132 cp "$BACKUP" "$CHGTEST"
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
133 # protect our feet - meld allows us to save to the left file
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
134 cp "$BACKUP" "$LOCAL.tmp.$RAND"
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
135 # Meld doesn't have automatic merging, so to reduce intervention
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
136 # use the file with conflicts
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
137 $MELD "$LOCAL.tmp.$RAND" "$LOCAL" "$OTHER" || failure
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
138 # Also it doesn't return good error code
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
139 test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
140 fi
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
141 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
142
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
143 # Attempt to do a merge with $EDITOR
1772
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
144 if [ -n "$MERGE" -o -n "$DIFF3" ]; then
242
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
145 echo "conflicts detected in $LOCAL"
1772
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
146 cp "$BACKUP" "$CHGTEST"
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
147 $EDITOR "$LOCAL" || failure
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
148 # Some editors do not return meaningful error codes
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
149 # Do not take any chances
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
150 test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
151 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
152
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
153 # 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
154 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
155
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
156 (umask 077 && mkdir "$HGTMP") || {
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
157 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
158 failure
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
159 }
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
160
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
161 $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || :
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
162 if $PATCH "$LOCAL" < "$HGTMP/diff"; then
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
163 success
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
164 else
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
165 # If rejects are empty after using the editor, merge was ok
1772
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
166 $EDITOR "$LOCAL" "$LOCAL.rej" || failure
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
167 test -s "$LOCAL.rej" || success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
168 fi
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
169 failure
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
170 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
171
1773
aae93c3bffb4 hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1772
diff changeset
172 echo
aae93c3bffb4 hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1772
diff changeset
173 echo "hgmerge: unable to find any merge utility!"
aae93c3bffb4 hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1772
diff changeset
174 echo "supported programs:"
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
175 echo "merge, FileMerge, tkdiff, kdiff3, meld, diff+patch"
1773
aae93c3bffb4 hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1772
diff changeset
176 echo
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
177 failure