annotate hgmerge @ 5811:180a3eee4b75

Fix copies reporting in log and convert. If copy logged in file revision, we report copy for changeset only if file revisions linkrev points back to the changeset in question or both changeset parents contain different file revisions. This fixes extra copies reported when executable bit was changed for previously copied file.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 29 Dec 2007 17:11:48 +0300
parents 3c80ecdc1bcd
children
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.
1885
c4d577262d00 run merge program in repo root.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1884
diff changeset
6 # The result ought to end up in $1. Script is run in root directory of
c4d577262d00 run merge program in repo root.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1884
diff changeset
7 # repository.
1883
b98160cfb2f3 give more info to hgmerge script.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1880
diff changeset
8 #
b98160cfb2f3 give more info to hgmerge script.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1880
diff changeset
9 # Environment variables set by Mercurial:
b98160cfb2f3 give more info to hgmerge script.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1880
diff changeset
10 # HG_FILE name of file within repo
b98160cfb2f3 give more info to hgmerge script.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1880
diff changeset
11 # HG_MY_NODE revision being merged
b98160cfb2f3 give more info to hgmerge script.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1880
diff changeset
12 # HG_OTHER_NODE revision being merged
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
13
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
14 set -e # bail out quickly on failure
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
15
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
16 LOCAL="$1"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
17 BASE="$2"
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
18 OTHER="$3"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
19
5660
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
20 if [ -n "$VISUAL" ]; then
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
21 EDIT_PROG="$VISUAL"
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
22 elif [ -n "$EDITOR" ]; then
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
23 EDIT_PROG="$EDITOR"
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
24 else
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
25 EDIT_PROG="vi"
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
26 fi
304
38fb7d23b78d Use vi if $EDITOR is unset.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 303
diff changeset
27
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
28 # 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
29 # need to
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
30 MERGE="merge"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
31 DIFF3="gdiff3"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
32 DIFF="gdiff"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
33 PATCH="gpatch"
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
34
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
35 type "$MERGE" >/dev/null 2>&1 || MERGE=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
36 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
37 $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
38 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
39 type "$DIFF" >/dev/null 2>&1 || DIFF=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
40 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
41 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
42
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
43 # find optional visual utilities
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
44 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
45 KDIFF3="kdiff3"
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
46 TKDIFF="tkdiff"
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
47 MELD="meld"
1699
83e8cd97b9f9 hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1664
diff changeset
48
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
49 type "$FILEMERGE" >/dev/null 2>&1 || FILEMERGE=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
50 type "$KDIFF3" >/dev/null 2>&1 || KDIFF3=
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
51 type "$TKDIFF" >/dev/null 2>&1 || TKDIFF=
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
52 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
53
2051
6a03cff2b0f5 Try to use /usr/bin/test or /bin/test to work around missing features.
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1885
diff changeset
54 # Hack for Solaris
6a03cff2b0f5 Try to use /usr/bin/test or /bin/test to work around missing features.
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1885
diff changeset
55 TEST="/usr/bin/test"
6a03cff2b0f5 Try to use /usr/bin/test or /bin/test to work around missing features.
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1885
diff changeset
56 type "$TEST" >/dev/null 2>&1 || TEST="/bin/test"
6a03cff2b0f5 Try to use /usr/bin/test or /bin/test to work around missing features.
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1885
diff changeset
57 type "$TEST" >/dev/null 2>&1 || TEST="test"
6a03cff2b0f5 Try to use /usr/bin/test or /bin/test to work around missing features.
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1885
diff changeset
58
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
59 # random part of names
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
60 RAND="$RANDOM$RANDOM"
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
61
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
62 # 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
63 HGTMP="${TMPDIR-/tmp}/hgmerge.$RAND"
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
64
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
65 # backup file
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
66 BACKUP="$LOCAL.orig.$RAND"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
67
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
68 # file used to test for file change
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
69 CHGTEST="$LOCAL.chg.$RAND"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
70
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
71 # put all your required cleanup here
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
72 cleanup() {
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
73 rm -f "$BACKUP" "$CHGTEST"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
74 rm -rf "$HGTMP"
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
75 }
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
76
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
77 # functions concerning program exit
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
78 success() {
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
79 cleanup
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
80 exit 0
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
81 }
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
82
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
83 failure() {
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
84 echo "merge failed" 1>&2
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
85 mv "$BACKUP" "$LOCAL"
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
86 cleanup
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
87 exit 1
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
88 }
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
89
1771
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
90 # 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
91 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
92 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
93 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
94 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
95 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
96 case "$answer" in
1771
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
97 y*|Y*) success;;
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
98 n*|N*) failure;;
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
99 esac
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
100 done
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
101 }
e22bbca2e82b hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1770
diff changeset
102
4855
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
103 # Check if conflict markers are present and ask if the merge was successful
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
104 conflicts_or_success() {
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
105 while egrep '^(<<<<<<< .*|=======|>>>>>>> .*)$' "$LOCAL" >/dev/null; do
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
106 echo "$LOCAL contains conflict markers."
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
107 echo "Keep this version? [y/n]"
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
108 read answer
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
109 case "$answer" in
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
110 y*|Y*) success;;
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
111 n*|N*) failure;;
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
112 esac
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
113 done
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
114 success
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
115 }
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
116
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
117 # Clean up when interrupted
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
118 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
119
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
120 # 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
121 mv "$LOCAL" "$BACKUP"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
122 cp "$BACKUP" "$LOCAL"
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
123
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
124 # 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
125 if [ -n "$MERGE" -o -n "$DIFF3" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
126 if [ -n "$MERGE" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
127 $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
128 elif [ -n "$DIFF3" ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
129 $DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" && success
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
130 fi
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
131 if [ $? -gt 1 ]; then
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
132 echo "automatic merge failed! Exiting." 1>&2
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
133 failure
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
134 fi
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
135 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
136
1664
4338e33c973b Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents: 1647
diff changeset
137 # 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
138 if [ -n "$FILEMERGE" ]; then
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
139 cp "$BACKUP" "$LOCAL"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
140 cp "$BACKUP" "$CHGTEST"
1664
4338e33c973b Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents: 1647
diff changeset
141 # filemerge prefers the right by default
1701
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
142 $FILEMERGE -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL"
4ba8fe499df2 hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1700
diff changeset
143 [ $? -ne 0 ] && echo "FileMerge failed to launch" && failure
4855
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
144 $TEST "$LOCAL" -nt "$CHGTEST" && conflicts_or_success || ask_if_merged
1647
64a1169c927d Use of opendiff as merge program on MacOS X
Christian Ebert <blacktrash@gmx.net>
parents: 1434
diff changeset
145 fi
64a1169c927d Use of opendiff as merge program on MacOS X
Christian Ebert <blacktrash@gmx.net>
parents: 1434
diff changeset
146
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
147 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
148 # 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
149 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
150 $KDIFF3 --auto "$BASE" "$BACKUP" "$OTHER" -o "$LOCAL" || failure
4855
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
151 conflicts_or_success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
152 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
153
303
15a9e55e7ea5 Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 280
diff changeset
154 # 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
155 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
156 $TKDIFF "$BACKUP" "$OTHER" -a "$BASE" -o "$LOCAL" || failure
4855
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
157 conflicts_or_success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
158 fi
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
159
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
160 if [ -n "$MELD" ]; then
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
161 cp "$BACKUP" "$CHGTEST"
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
162 # 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
163 cp "$BACKUP" "$LOCAL.tmp.$RAND"
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
164 # 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
165 # use the file with conflicts
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
166 $MELD "$LOCAL.tmp.$RAND" "$LOCAL" "$OTHER" || failure
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
167 # Also it doesn't return good error code
4855
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
168 $TEST "$LOCAL" -nt "$CHGTEST" && conflicts_or_success || ask_if_merged
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
169 fi
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
5660
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
172 # Attempt to do a merge with $EDIT_PROG
1772
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
173 if [ -n "$MERGE" -o -n "$DIFF3" ]; then
242
a2edb4481f19 hgmerge: use diff3 if available
mpm@selenic.com
parents: 240
diff changeset
174 echo "conflicts detected in $LOCAL"
1772
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
175 cp "$BACKUP" "$CHGTEST"
5660
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
176 case "$EDIT_PROG" in
5172
f53d97d651f4 Use smerge minor mode in emacs to resolve conflicts.
Sascha Wilde <wilde@sha-bang.de>
parents: 4855
diff changeset
177 "emacs")
5660
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
178 $EDIT_PROG "$LOCAL" --eval '(condition-case nil (smerge-mode 1) (error nil))' || failure
5172
f53d97d651f4 Use smerge minor mode in emacs to resolve conflicts.
Sascha Wilde <wilde@sha-bang.de>
parents: 4855
diff changeset
179 ;;
f53d97d651f4 Use smerge minor mode in emacs to resolve conflicts.
Sascha Wilde <wilde@sha-bang.de>
parents: 4855
diff changeset
180 *)
5660
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
181 $EDIT_PROG "$LOCAL" || failure
5172
f53d97d651f4 Use smerge minor mode in emacs to resolve conflicts.
Sascha Wilde <wilde@sha-bang.de>
parents: 4855
diff changeset
182 ;;
f53d97d651f4 Use smerge minor mode in emacs to resolve conflicts.
Sascha Wilde <wilde@sha-bang.de>
parents: 4855
diff changeset
183 esac
1772
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
184 # Some editors do not return meaningful error codes
b1a7fd503a29 hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1771
diff changeset
185 # Do not take any chances
4855
e4480f2b61e9 Check for conflict markers in hgmerge (issue471)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2051
diff changeset
186 $TEST "$LOCAL" -nt "$CHGTEST" && conflicts_or_success || ask_if_merged
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
187 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
188
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
189 # 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
190 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
191
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
192 (umask 077 && mkdir "$HGTMP") || {
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
193 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
194 failure
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
195 }
795
cd0ad12d9e42 Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 547
diff changeset
196
1434
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
197 $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || :
696851b1bba9 Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents: 839
diff changeset
198 if $PATCH "$LOCAL" < "$HGTMP/diff"; then
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
199 success
829
764b0350acb8 Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 828
diff changeset
200 else
1770
4eea6a747c27 hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1701
diff changeset
201 # If rejects are empty after using the editor, merge was ok
5660
3c80ecdc1bcd Use VISUAL in addition to EDITOR when choosing the editor to use.
Osku Salerma <osku@iki.fi>
parents: 5172
diff changeset
202 $EDIT_PROG "$LOCAL" "$LOCAL.rej" || failure
2051
6a03cff2b0f5 Try to use /usr/bin/test or /bin/test to work around missing features.
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1885
diff changeset
203 $TEST -s "$LOCAL.rej" || success
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
204 fi
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
205 failure
240
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
206 fi
737c66b68290 Replace tkmerge with hgmerge
mpm@selenic.com
parents:
diff changeset
207
1773
aae93c3bffb4 hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1772
diff changeset
208 echo
aae93c3bffb4 hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1772
diff changeset
209 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
210 echo "supported programs:"
1774
ac7b91bcbd8d hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1773
diff changeset
211 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
212 echo
1700
e2f91e0acbb8 hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents: 1699
diff changeset
213 failure