diff hggit/overlay.py @ 899:11ca21820a95

overlay: adapt diff to work with lazymanifests
author Siddharth Agarwal <sid0@fb.com>
date Fri, 08 May 2015 16:00:45 -0700
parents 431d5121528d
children db308eba5251
line wrap: on
line diff
--- a/hggit/overlay.py	Sun May 03 13:14:20 2015 -0700
+++ b/hggit/overlay.py	Fri May 08 16:00:45 2015 -0700
@@ -103,10 +103,16 @@
         # below code copied from manifest.py:manifestdict.diff
         diff = {}
 
+        try:
+            m2flagget = m2.flags
+        except AttributeError:
+            # Mercurial <= 3.3
+            m2flagget = m2._flags.get
+
         for fn, n1 in self.iteritems():
             fl1 = self._flags.get(fn, '')
             n2 = m2.get(fn, None)
-            fl2 = m2._flags.get(fn, '')
+            fl2 = m2flagget(fn, '')
             if n2 is None:
                 fl2 = ''
             if n1 != n2 or fl1 != fl2:
@@ -116,7 +122,7 @@
 
         for fn, n2 in m2.iteritems():
             if fn not in self:
-                fl2 = m2._flags.get(fn, '')
+                fl2 = m2flagget(fn, '')
                 diff[fn] = ((None, ''), (n2, fl2))
 
         return diff
@@ -124,6 +130,18 @@
     def __delitem__(self, path):
         del self._map[path]
 
+def wrapmanifestdictdiff(orig, self, m2, clean=False):
+    '''avoid calling into lazymanifest code if m2 is an overlaymanifest'''
+    if isinstance(m2, overlaymanifest):
+        diff = m2.diff(self, clean=clean)
+        # since we calculated the diff with m2 vs m1, flip it around
+        for fn in diff:
+            c1, c2 = diff[fn]
+            diff[fn] = c2, c1
+        return diff
+    else:
+        return orig(self, m2, clean=clean)
+
 class overlayfilectx(object):
     def __init__(self, repo, path, fileid=None):
         self.repo = repo