# HG changeset patch # User Martin von Zweigbergk # Date 1413331756 25200 # Node ID 2793ecb1522d99b92e294f87b9eb800988cd6bbe # Parent 56e04741bbf1a9fb565a4454fb708ab3fca30417 manifest: repurpose flagsdiff() into (node-and-flag)diff() The manifestdict class already has a method for diff flags between two manifests (presumably because there is no full access to the private _flags field). The only caller is merge.manifestmerge(), which also wants a diff of files between the same manifests. Let's combine the code for diffing files and flags into a single method on manifestdict. This puts all the manifest diffing in one place and will allow for further simplification. It might also be useful for it to be encapsulated in manifestdict if we later decide to to shard manifests. The docstring is intentionally unclear about missing entries for now. diff -r 56e04741bbf1 -r 2793ecb1522d mercurial/manifest.py --- a/mercurial/manifest.py Thu Oct 16 17:03:21 2014 +0900 +++ b/mercurial/manifest.py Tue Oct 14 17:09:16 2014 -0700 @@ -38,8 +38,15 @@ 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 -r 56e04741bbf1 -r 2793ecb1522d mercurial/merge.py --- a/mercurial/merge.py Thu Oct 16 17:03:21 2014 +0900 +++ b/mercurial/merge.py Tue Oct 14 17:09:16 2014 -0700 @@ -10,7 +10,7 @@ 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 @@ 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