manifest: move manifestdict-to-text encoding to manifest class
A future patch will introduce a new format, with a new class.
--- a/mercurial/manifest.py Fri Oct 03 13:22:31 2014 -0700
+++ b/mercurial/manifest.py Wed Oct 08 14:47:30 2014 -0400
@@ -40,6 +40,14 @@
def flagsdiff(self, d2):
return dicthelpers.diff(self._flags, d2._flags, "")
+ def text(self):
+ fl = sorted(self)
+ _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)
def _checkforbidden(l):
"""Check filenames for illegal characters."""
@@ -220,14 +228,7 @@
# just encode a fulltext of the manifest and pass that
# through to the revlog layer, and let it handle the delta
# process.
- files = sorted(map)
- _checkforbidden(files)
-
- # if this is changed to support newlines in filenames,
- # be sure to check the templates/ dir again (especially *-raw.tmpl)
- hex, flags = revlog.hex, map.flags
- text = ''.join("%s\0%s%s\n" % (f, hex(map[f]), flags(f))
- for f in files)
+ text = map.text()
arraytext = array.array('c', text)
cachedelta = None