# HG changeset patch # User Matt Mackall # Date 2009-11-08 16:29:52 # Node ID ee00ef6f9be7581d95e35cdec732b552d7025629 # Parent c1c40511c276006abf25356f5d22724e9a91e0e7 submerge: properly deal with overwrites also pull .hgsubstate check out of inner loop diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -167,14 +167,15 @@ def manifestmerge(repo, p1, p2, pa, over m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest() copied = set(copy.values()) + if not overwrite and '.hgsubstate' in m1: + # check whether sub state is modified + for s in p1.substate: + if p1.sub(s).dirty(): + m1['.hgsubstate'] += "+" + break + # Compare manifests for f, n in m1.iteritems(): - if f == '.hgsubstate': - # check whether sub state is modified - for s in p1.substate: - if p1.sub(s).dirty(): - n += "+" - break if partial and not partial(f): continue if f in m2: diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -60,7 +60,7 @@ def submerge(repo, wctx, mctx, actx): repo.ui.debug(" subrepo %s: %s %s\n" % (s, msg, r)) for s, l in s1.items(): - if wctx.sub(s).dirty(): + if wctx != actx and wctx.sub(s).dirty(): l = (l[0], l[1] + "+") a = sa.get(s, nullstate) if s in s2: diff --git a/tests/test-subrepo.out b/tests/test-subrepo.out --- a/tests/test-subrepo.out +++ b/tests/test-subrepo.out @@ -56,6 +56,9 @@ resolving manifests overwrite None partial False ancestor 1f14a2e2d3ec local f0d2028bf86d+ remote 1831e14459c4 .hgsubstate: versions differ -> m +subrepo merge f0d2028bf86d+ 1831e14459c4 1f14a2e2d3ec + subrepo t: other changed, get t:6747d179aa9a688023c4b0cad32e4c92bb7f34ad +getting subrepo t resolving manifests overwrite True partial False ancestor 60ca1237c194+ local 60ca1237c194+ remote 6747d179aa9a @@ -75,6 +78,9 @@ resolving manifests overwrite None partial False ancestor 1831e14459c4 local e45c8b14af55+ remote f94576341bcf .hgsubstate: versions differ -> m +subrepo merge e45c8b14af55+ f94576341bcf 1831e14459c4 + subrepo t: both sides changed, merge with t:7af322bc1198a32402fe903e0b7ebcfc5c9bf8f4 +merging subrepo t searching for copies back to rev 2 resolving manifests overwrite None partial False