Mercurial > hg
annotate hgmerge @ 1880:05c7d75be925
fix broken environment save/restore when a hook runs.
move "run commend with different env/cwd" code out to function in util.
new function is called esystem.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Fri, 10 Mar 2006 22:24:19 -0800 |
parents | d610fe0e6893 |
children | 4392ccefe432 b98160cfb2f3 |
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 | 2 # |
3 # hgmerge - default merge helper for Mercurial | |
4 # | |
5 # This tries to find a way to do three-way merge on the current system. | |
6 # The result ought to end up in $1. | |
7 | |
8 set -e # bail out quickly on failure | |
9 | |
1880
05c7d75be925
fix broken environment save/restore when a hook runs.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1798
diff
changeset
|
10 echo $1 $2 $3 |
05c7d75be925
fix broken environment save/restore when a hook runs.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1798
diff
changeset
|
11 |
795
cd0ad12d9e42
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
547
diff
changeset
|
12 LOCAL="$1" |
cd0ad12d9e42
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
547
diff
changeset
|
13 BASE="$2" |
cd0ad12d9e42
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
547
diff
changeset
|
14 OTHER="$3" |
240 | 15 |
795
cd0ad12d9e42
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
547
diff
changeset
|
16 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
|
17 EDITOR="vi" |
cd0ad12d9e42
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
547
diff
changeset
|
18 fi |
304
38fb7d23b78d
Use vi if $EDITOR is unset.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
303
diff
changeset
|
19 |
1434
696851b1bba9
Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents:
839
diff
changeset
|
20 # 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
|
21 # need to |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
22 MERGE="merge" |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
23 DIFF3="gdiff3" |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
24 DIFF="gdiff" |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
25 PATCH="gpatch" |
1434
696851b1bba9
Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents:
839
diff
changeset
|
26 |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
27 type "$MERGE" >/dev/null 2>&1 || MERGE= |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
28 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
|
29 $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
|
30 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
|
31 type "$DIFF" >/dev/null 2>&1 || DIFF= |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
32 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
|
33 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
|
34 |
1699
83e8cd97b9f9
hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1664
diff
changeset
|
35 # find optional visual utilities |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
36 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
|
37 KDIFF3="kdiff3" |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
38 TKDIFF="tkdiff" |
1774
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
39 MELD="meld" |
1699
83e8cd97b9f9
hgmerge: add and use more tool variables
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1664
diff
changeset
|
40 |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
41 type "$FILEMERGE" >/dev/null 2>&1 || FILEMERGE= |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
42 type "$KDIFF3" >/dev/null 2>&1 || KDIFF3= |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
43 type "$TKDIFF" >/dev/null 2>&1 || TKDIFF= |
1774
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
44 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
|
45 |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
46 # random part of names |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
47 RAND="$RANDOM$RANDOM" |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
48 |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
49 # 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
|
50 HGTMP="${TMPDIR-/tmp}/hgmerge.$RAND" |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
51 |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
52 # backup file |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
53 BACKUP="$LOCAL.orig.$RAND" |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
54 |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
55 # file used to test for file change |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
56 CHGTEST="$LOCAL.chg.$RAND" |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
57 |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
58 # put all your required cleanup here |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
59 cleanup() { |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
60 rm -f "$BACKUP" "$CHGTEST" |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
61 rm -rf "$HGTMP" |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
62 } |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
63 |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
64 # functions concerning program exit |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
65 success() { |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
66 cleanup |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
67 exit 0 |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
68 } |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
69 |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
70 failure() { |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
71 echo "merge failed" 1>&2 |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
72 mv "$BACKUP" "$LOCAL" |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
73 cleanup |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
74 exit 1 |
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 |
1771
e22bbca2e82b
hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1770
diff
changeset
|
77 # 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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 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
|
83 case "$answer" in |
1771
e22bbca2e82b
hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1770
diff
changeset
|
84 y*|Y*) success;; |
e22bbca2e82b
hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1770
diff
changeset
|
85 n*|N*) failure;; |
e22bbca2e82b
hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1770
diff
changeset
|
86 esac |
e22bbca2e82b
hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1770
diff
changeset
|
87 done |
e22bbca2e82b
hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1770
diff
changeset
|
88 } |
e22bbca2e82b
hgmerge: add and use ask_if_merged function
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1770
diff
changeset
|
89 |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
90 # Clean up when interrupted |
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
91 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
|
92 |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
93 # 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
|
94 mv "$LOCAL" "$BACKUP" |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
95 cp "$BACKUP" "$LOCAL" |
240 | 96 |
97 # 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
|
98 if [ -n "$MERGE" -o -n "$DIFF3" ]; then |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
99 if [ -n "$MERGE" ]; then |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
100 $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
|
101 elif [ -n "$DIFF3" ]; then |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
102 $DIFF3 -m "$BACKUP" "$BASE" "$OTHER" > "$LOCAL" && success |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
103 fi |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
104 if [ $? -gt 1 ]; then |
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
105 echo "automatic merge failed! Exiting." 1>&2 |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
106 failure |
1434
696851b1bba9
Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents:
839
diff
changeset
|
107 fi |
240 | 108 fi |
109 | |
1664
4338e33c973b
Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents:
1647
diff
changeset
|
110 # 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
|
111 if [ -n "$FILEMERGE" ]; then |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
112 cp "$BACKUP" "$LOCAL" |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
113 cp "$BACKUP" "$CHGTEST" |
1664
4338e33c973b
Safer version of FileMerge merge
Brendan Cully <brendan@kublai.com>
parents:
1647
diff
changeset
|
114 # filemerge prefers the right by default |
1701
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
115 $FILEMERGE -left "$OTHER" -right "$LOCAL" -ancestor "$BASE" -merge "$LOCAL" |
4ba8fe499df2
hgmerge: various cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1700
diff
changeset
|
116 [ $? -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
|
117 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
|
118 fi |
64a1169c927d
Use of opendiff as merge program on MacOS X
Christian Ebert <blacktrash@gmx.net>
parents:
1434
diff
changeset
|
119 |
303
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
120 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
|
121 # 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
|
122 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
|
123 $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
|
124 success |
240 | 125 fi |
126 | |
303
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
127 # 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
|
128 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
|
129 $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
|
130 success |
240 | 131 fi |
1774
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
132 |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
133 if [ -n "$MELD" ]; then |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
134 cp "$BACKUP" "$CHGTEST" |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
135 # 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
|
136 cp "$BACKUP" "$LOCAL.tmp.$RAND" |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
137 # 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
|
138 # use the file with conflicts |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
139 $MELD "$LOCAL.tmp.$RAND" "$LOCAL" "$OTHER" || failure |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
140 # Also it doesn't return good error code |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
141 test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged |
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
142 fi |
240 | 143 fi |
144 | |
145 # Attempt to do a merge with $EDITOR | |
1772
b1a7fd503a29
hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1771
diff
changeset
|
146 if [ -n "$MERGE" -o -n "$DIFF3" ]; then |
242 | 147 echo "conflicts detected in $LOCAL" |
1772
b1a7fd503a29
hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1771
diff
changeset
|
148 cp "$BACKUP" "$CHGTEST" |
b1a7fd503a29
hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1771
diff
changeset
|
149 $EDITOR "$LOCAL" || failure |
b1a7fd503a29
hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1771
diff
changeset
|
150 # Some editors do not return meaningful error codes |
b1a7fd503a29
hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1771
diff
changeset
|
151 # Do not take any chances |
b1a7fd503a29
hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1771
diff
changeset
|
152 test "$LOCAL" -nt "$CHGTEST" && success || ask_if_merged |
240 | 153 fi |
154 | |
155 # 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
|
156 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
|
157 |
829
764b0350acb8
Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
828
diff
changeset
|
158 (umask 077 && mkdir "$HGTMP") || { |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
159 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
|
160 failure |
829
764b0350acb8
Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
828
diff
changeset
|
161 } |
795
cd0ad12d9e42
Remove usage of ${par:-word}, which and mktemp. Quote filenames.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
547
diff
changeset
|
162 |
1434
696851b1bba9
Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents:
839
diff
changeset
|
163 $DIFF -u "$BASE" "$OTHER" > "$HGTMP/diff" || : |
696851b1bba9
Fix use of diff(1) triggered by set -e.
levon@movementarian.org
parents:
839
diff
changeset
|
164 if $PATCH "$LOCAL" < "$HGTMP/diff"; then |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
165 success |
829
764b0350acb8
Shortened hgmerge a little bit.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
828
diff
changeset
|
166 else |
1770
4eea6a747c27
hgmerge: fix diff+patch detection; cleanups
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1701
diff
changeset
|
167 # 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
|
168 $EDITOR "$LOCAL" "$LOCAL.rej" || failure |
b1a7fd503a29
hgmerge: logic changes
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1771
diff
changeset
|
169 test -s "$LOCAL.rej" || success |
240 | 170 fi |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
171 failure |
240 | 172 fi |
173 | |
1773
aae93c3bffb4
hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1772
diff
changeset
|
174 echo |
aae93c3bffb4
hgmerge: improve "apps not found" message
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1772
diff
changeset
|
175 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
|
176 echo "supported programs:" |
1774
ac7b91bcbd8d
hgmerge: add meld support
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1773
diff
changeset
|
177 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
|
178 echo |
1700
e2f91e0acbb8
hgmerge: add cleanup functions
Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
parents:
1699
diff
changeset
|
179 failure |