diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -1035,6 +1035,15 @@ class localrepository: 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) diff --git a/tests/test-merge1 b/tests/test-merge1 new file mode 100755 --- /dev/null +++ b/tests/test-merge1 @@ -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 diff --git a/tests/test-merge1.out b/tests/test-merge1.out new file mode 100644 --- /dev/null +++ b/tests/test-merge1.out @@ -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