Mercurial > hg > mercurial-crew-with-dirclash
annotate hgmerge @ 576:da11baf5de7b
Handle unknown files better on update
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Handle unknown files better on update
If we spot an unknown file that's identical to one that's in the
update, we get the updated one so that it shows up in the dirstate
properly.
manifest hash: 988aca64f255df67c27d1c6f8694ea098e4ec159
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCxyFyywK+sNU5EO8RAjmiAKCTgINXMPB1CxHt0OgHYPucfjCS7QCcDpJJ
VgKqZS54hTAWN3jL2yllUhI=
=iPQD
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Sat, 02 Jul 2005 15:21:22 -0800 |
parents | 4fc63e22b1fe |
children | cd0ad12d9e42 8f5637f0a0c0 0902ffece4b4 |
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 | |
10 LOCAL=$1 | |
11 BASE=$2 | |
12 OTHER=$3 | |
13 | |
304
38fb7d23b78d
Use vi if $EDITOR is unset.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
303
diff
changeset
|
14 EDITOR="${EDITOR:-vi}" |
38fb7d23b78d
Use vi if $EDITOR is unset.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
303
diff
changeset
|
15 |
240 | 16 # Back up our file |
17 cp $LOCAL $LOCAL.orig | |
18 | |
19 # Attempt to do a non-interactive merge | |
20 if which merge > /dev/null ; then | |
21 if merge $LOCAL $BASE $OTHER 2> /dev/null; then | |
22 # success! | |
23 exit 0 | |
24 fi | |
25 cp $LOCAL.orig $LOCAL | |
242 | 26 elif which diff3 > /dev/null ; then |
27 if diff3 -m $LOCAL.orig $BASE $OTHER > $LOCAL ; then | |
28 # success | |
29 exit 0 | |
30 fi | |
31 cp $LOCAL.orig $LOCAL | |
240 | 32 fi |
33 | |
303
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
34 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
|
35 # try using kdiff3, which is fairly nice |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
36 if which kdiff3 > /dev/null ; then |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
37 if kdiff3 --auto $BASE $LOCAL $OTHER -o $LOCAL ; then |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
38 exit 0 |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
39 else |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
40 exit 1 |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
41 fi |
240 | 42 fi |
43 | |
303
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
44 # try using tkdiff, which is a bit less sophisticated |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
45 if which tkdiff > /dev/null ; then |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
46 if tkdiff $LOCAL $OTHER -a $BASE -o $LOCAL ; then |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
47 exit 0 |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
48 else |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
49 exit 1 |
15a9e55e7ea5
Check if $DISPLAY is set before using tkdiff or kdiff3.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
280
diff
changeset
|
50 fi |
240 | 51 fi |
52 fi | |
53 | |
54 # Attempt to do a merge with $EDITOR | |
55 if which merge > /dev/null ; then | |
56 echo "conflicts detected in $LOCAL" | |
57 merge $LOCAL $BASE $OTHER 2>/dev/null || $EDITOR $LOCAL | |
242 | 58 exit 0 |
59 fi | |
60 | |
61 if which diff3 > /dev/null ; then | |
62 echo "conflicts detected in $LOCAL" | |
63 diff3 -m $LOCAL.orig $BASE $OTHER > $LOCAL || $EDITOR $LOCAL | |
64 exit 0 | |
240 | 65 fi |
66 | |
67 # attempt to manually merge with diff and patch | |
68 if which diff > /dev/null ; then | |
69 if which patch > /dev/null ; then | |
70 T=`mktemp` | |
71 diff -u $BASE $OTHER > $T | |
72 if patch $LOCAL < $T ; then | |
73 exit 0 | |
74 else | |
75 $EDITOR $LOCAL $LOCAL.rej | |
76 fi | |
77 rm $T | |
78 exit 1 | |
79 fi | |
80 fi | |
81 | |
82 echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!" | |
83 exit 1 |