[PATCH] Merging identical changes from another branch
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[PATCH] Merging identical changes from another branch
From: Michael A Fetterman <Michael.Fetterman@cl.cam.ac.uk>
The issue comes up when a local uncommitted *new* file (i.e. not in the
current manifest) is being merged with an identical file from a branch.
Since the file is not in the current manifest (it's either in the
current "to-be-added" list, or in the "unknown" state), there's no
(local) node from which to create a mergepoint.
manifest hash:
4e64ce654a6473524789a97bbaf8bff61b4343af
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCuM/1ywK+sNU5EO8RAn7xAKCJoH/CgzVK4h4xPJDrd2lY9XOINACgmt01
92uuMswZXcoCchQAaxew7C0=
=qRsk
-----END PGP SIGNATURE-----
--- a/mercurial/hg.py Tue Jun 21 18:35:32 2005 -0800
+++ b/mercurial/hg.py Tue Jun 21 18:41:57 2005 -0800
@@ -1035,6 +1035,15 @@
if f in m2:
s = 0
+ # is the wfile new since m1, and match m2?
+ if n not in m1:
+ t1 = self.wfile(f).read()
+ t2 = self.file(f).revision(m2[f])
+ if cmp(t1, t2) == 0:
+ mark[f] = 1
+ n = m2[f]
+ del t1, t2
+
# are files different?
if n != m2[f]:
a = ma.get(f, nullid)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge1 Tue Jun 21 18:41:57 2005 -0800
@@ -0,0 +1,85 @@
+#!/bin/sh -x
+
+cat <<'EOF' > merge
+#!/bin/sh
+echo merging for `basename $1`
+EOF
+chmod +x merge
+
+mkdir t
+cd t
+hg init
+echo This is file a1 > a
+hg add a
+hg commit -t "commit #0" -d "0 0" -u user
+echo This is file b1 > b
+hg add b
+hg commit -t "commit #1" -d "0 0" -u user
+
+hg update 0
+echo This is file c1 > c
+hg add c
+hg commit -t "commit #2" -d "0 0" -u user
+echo This is file b1 > b
+env HGMERGE=../merge hg update -m 1
+# no merges expected
+cd ..; /bin/rm -rf t
+
+mkdir t
+cd t
+hg init
+echo This is file a1 > a
+hg add a
+hg commit -t "commit #0" -d "0 0" -u user
+echo This is file b1 > b
+hg add b
+hg commit -t "commit #1" -d "0 0" -u user
+
+hg update 0
+echo This is file c1 > c
+hg add c
+hg commit -t "commit #2" -d "0 0" -u user
+echo This is file b2 > b
+env HGMERGE=../merge hg update -m 1
+# merge of b expected
+cd ..; /bin/rm -rf t
+
+mkdir t
+cd t
+hg init
+echo This is file a1 > a
+hg add a
+hg commit -t "commit #0" -d "0 0" -u user
+echo This is file b1 > b
+hg add b
+hg commit -t "commit #1" -d "0 0" -u user
+echo This is file b22 > b
+hg commit -t "commit #2" -d "0 0" -u user
+hg update 1
+echo This is file c1 > c
+hg add c
+hg commit -t "commit #3" -d "0 0" -u user
+echo This is file b22 > b
+env HGMERGE=../merge hg update -m 2
+# no merges expected
+cd ..; /bin/rm -rf t
+
+mkdir t
+cd t
+hg init
+echo This is file a1 > a
+hg add a
+hg commit -t "commit #0" -d "0 0" -u user
+echo This is file b1 > b
+hg add b
+hg commit -t "commit #1" -d "0 0" -u user
+echo This is file b22 > b
+hg commit -t "commit #2" -d "0 0" -u user
+hg update 1
+echo This is file c1 > c
+hg add c
+hg commit -t "commit #3" -d "0 0" -u user
+echo This is file b33 > b
+env HGMERGE=../merge hg update -m 2
+# merge of b expected
+cd ..; /bin/rm -rf t
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge1.out Tue Jun 21 18:41:57 2005 -0800
@@ -0,0 +1,78 @@
++ cat
++ chmod +x merge
++ mkdir t
++ cd t
++ hg init
++ echo This is file a1
++ hg add a
++ hg commit -t 'commit #0' -d '0 0' -u user
++ echo This is file b1
++ hg add b
++ hg commit -t 'commit #1' -d '0 0' -u user
++ hg update 0
++ echo This is file c1
++ hg add c
++ hg commit -t 'commit #2' -d '0 0' -u user
++ echo This is file b1
++ env HGMERGE=../merge hg update -m 1
++ cd ..
++ /bin/rm -rf t
++ mkdir t
++ cd t
++ hg init
++ echo This is file a1
++ hg add a
++ hg commit -t 'commit #0' -d '0 0' -u user
++ echo This is file b1
++ hg add b
++ hg commit -t 'commit #1' -d '0 0' -u user
++ hg update 0
++ echo This is file c1
++ hg add c
++ hg commit -t 'commit #2' -d '0 0' -u user
++ echo This is file b2
++ env HGMERGE=../merge hg update -m 1
+merging for b
+merging b
++ cd ..
++ /bin/rm -rf t
++ mkdir t
++ cd t
++ hg init
++ echo This is file a1
++ hg add a
++ hg commit -t 'commit #0' -d '0 0' -u user
++ echo This is file b1
++ hg add b
++ hg commit -t 'commit #1' -d '0 0' -u user
++ echo This is file b22
++ hg commit -t 'commit #2' -d '0 0' -u user
++ hg update 1
++ echo This is file c1
++ hg add c
++ hg commit -t 'commit #3' -d '0 0' -u user
++ echo This is file b22
++ env HGMERGE=../merge hg update -m 2
++ cd ..
++ /bin/rm -rf t
++ mkdir t
++ cd t
++ hg init
++ echo This is file a1
++ hg add a
++ hg commit -t 'commit #0' -d '0 0' -u user
++ echo This is file b1
++ hg add b
++ hg commit -t 'commit #1' -d '0 0' -u user
++ echo This is file b22
++ hg commit -t 'commit #2' -d '0 0' -u user
++ hg update 1
++ echo This is file c1
++ hg add c
++ hg commit -t 'commit #3' -d '0 0' -u user
++ echo This is file b33
++ env HGMERGE=../merge hg update -m 2
+merging for b
+merging b
++ cd ..
++ /bin/rm -rf t