Mercurial > hg
changeset 407:0e0d0670b2bc
[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-----
author | mpm@selenic.com |
---|---|
date | Tue, 21 Jun 2005 18:41:57 -0800 |
parents | d8abb687d501 |
children | 3695fbd2c33b |
files | mercurial/hg.py tests/test-merge1 tests/test-merge1.out |
diffstat | 3 files changed, 172 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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