changeset 21835:b342c3e2518a

memctx: add _manifest implementation that computes the filenode This is an initial implementation of having a manifest for memctx that computes the hash in the same way that filenodes are computed elsewhere.
author Sean Farley <sean.michael.farley@gmail.com>
date Thu, 29 May 2014 16:12:59 -0500
parents e4d35aa9056c
children 232038a05fdb
files mercurial/context.py
diffstat 1 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/context.py	Tue Apr 29 16:43:59 2014 -0500
+++ b/mercurial/context.py	Thu May 29 16:12:59 2014 -0500
@@ -13,6 +13,7 @@
 import obsolete as obsmod
 import repoview
 import fileset
+import revlog
 
 propertycache = util.propertycache
 
@@ -1587,6 +1588,27 @@
         """commit context to the repo"""
         return self._repo.commitctx(self)
 
+    @propertycache
+    def _manifest(self):
+        """generate a manifest based on the return values of filectxfn"""
+
+        # keep this simple for now; just worry about p1
+        pctx = self._parents[0]
+        man = pctx.manifest().copy()
+
+        for f, fnode in man.iteritems():
+            p1node = nullid
+            p2node = nullid
+            p = pctx[f].parents()
+            if len(p) > 0:
+                p1node = p[0].node()
+                if len(p) > 1:
+                    p2node = p[1].node()
+            man[f] = revlog.hash(self[f].data(), p1node, p2node)
+
+        return man
+
+
 class memfilectx(committablefilectx):
     """memfilectx represents an in-memory file to commit.