diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -38,8 +38,15 @@ class manifestdict(dict): if flags: ret._flags[fn] = flags return ret - def flagsdiff(self, d2): - return dicthelpers.diff(self._flags, d2._flags, "") + + def diff(self, m2): + '''Finds changes between the current manifest and m2. The result is + returned as a dict with filename as key and values of the form + ((n1,n2),(fl1,fl2)), where n1/n2 is the nodeid in the current/other + manifest and fl1/fl2 is the flag in the current/other manifest.''' + flagsdiff = dicthelpers.diff(self._flags, m2._flags, "") + fdiff = dicthelpers.diff(self, m2) + return dicthelpers.join(fdiff, flagsdiff) def text(self): """Get the full data of this manifest as a bytestring.""" diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -10,7 +10,7 @@ import struct from node import nullid, nullrev, hex, bin from i18n import _ from mercurial import obsolete -import error as errormod, util, filemerge, copies, subrepo, worker, dicthelpers +import error as errormod, util, filemerge, copies, subrepo, worker import errno, os, shutil _pack = struct.pack @@ -422,11 +422,9 @@ def manifestmerge(repo, wctx, p2, pa, br aborts = [] # Compare manifests - fdiff = dicthelpers.diff(m1, m2) - flagsdiff = m1.flagsdiff(m2) - diff12 = dicthelpers.join(fdiff, flagsdiff) + diff = m1.diff(m2) - for f, (n12, fl12) in diff12.iteritems(): + for f, (n12, fl12) in diff.iteritems(): if n12: n1, n2 = n12 else: # file contents didn't change, but flags did