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