manifest: extract method for creating manifest text
authorMartin von Zweigbergk <martinvonz@google.com>
Fri, 27 Mar 2015 15:37:46 -0700
changeset 24525 e118f74d246f
parent 24524 63b6031384fc
child 24526 cd50f3717639
manifest: extract method for creating manifest text Similar to the previous change, this one extracts a method for producing a manifest text from an iterator over (path, node, flags) tuples.
mercurial/manifest.py
--- a/mercurial/manifest.py	Fri Mar 27 15:02:43 2015 -0700
+++ b/mercurial/manifest.py	Fri Mar 27 15:37:46 2015 -0700
@@ -31,6 +31,21 @@
         else:
             yield f, revlog.bin(n), ''
 
+def _text(it):
+    """Given an iterator over (path, node, flags) tuples, returns a manifest
+    text"""
+    files = []
+    lines = []
+    _hex = revlog.hex
+    for f, n, fl in it:
+        files.append(f)
+        # if this is changed to support newlines in filenames,
+        # be sure to check the templates/ dir again (especially *-raw.tmpl)
+        lines.append("%s\0%s%s\n" % (f, _hex(n), fl))
+
+    _checkforbidden(files)
+    return ''.join(lines)
+
 class _lazymanifest(dict):
     """This is the pure implementation of lazymanifest.
 
@@ -92,13 +107,7 @@
 
     def text(self):
         """Get the full data of this manifest as a bytestring."""
-        fl = self.iterentries()
-
-        _hex = revlog.hex
-        # if this is changed to support newlines in filenames,
-        # be sure to check the templates/ dir again (especially *-raw.tmpl)
-        return ''.join("%s\0%s%s\n" % (
-            f, _hex(n[:20]), flag) for f, n, flag in fl)
+        return _text(self.iterentries())
 
 try:
     _lazymanifest = parsers.lazymanifest
@@ -578,13 +587,8 @@
 
     def text(self):
         """Get the full data of this manifest as a bytestring."""
-        fl = self.keys()
-        _checkforbidden(fl)
-
-        hex, flags = revlog.hex, self.flags
-        # if this is changed to support newlines in filenames,
-        # be sure to check the templates/ dir again (especially *-raw.tmpl)
-        return ''.join("%s\0%s%s\n" % (f, hex(self[f]), flags(f)) for f in fl)
+        flags = self.flags
+        return _text((f, self[f], flags(f)) for f in self.keys())
 
 class manifest(revlog.revlog):
     def __init__(self, opener):