comparison mercurial/manifest.py @ 22929:bf69cb09a6c9

manifest: move manifestdict-to-text encoding to manifest class A future patch will introduce a new format, with a new class.
author Augie Fackler <raf@durin42.com>
date Wed, 08 Oct 2014 14:47:30 -0400
parents 160efd225b24
children 1acb81d10eaf
comparison
equal deleted inserted replaced
22928:5e5d297ccbd0 22929:bf69cb09a6c9
38 ret._flags[fn] = flags 38 ret._flags[fn] = flags
39 return ret 39 return ret
40 def flagsdiff(self, d2): 40 def flagsdiff(self, d2):
41 return dicthelpers.diff(self._flags, d2._flags, "") 41 return dicthelpers.diff(self._flags, d2._flags, "")
42 42
43 def text(self):
44 fl = sorted(self)
45 _checkforbidden(fl)
46
47 hex, flags = revlog.hex, self.flags
48 # if this is changed to support newlines in filenames,
49 # be sure to check the templates/ dir again (especially *-raw.tmpl)
50 return ''.join("%s\0%s%s\n" % (f, hex(self[f]), flags(f)) for f in fl)
43 51
44 def _checkforbidden(l): 52 def _checkforbidden(l):
45 """Check filenames for illegal characters.""" 53 """Check filenames for illegal characters."""
46 for f in l: 54 for f in l:
47 if '\n' in f or '\r' in f: 55 if '\n' in f or '\r' in f:
218 else: 226 else:
219 # The first parent manifest isn't already loaded, so we'll 227 # The first parent manifest isn't already loaded, so we'll
220 # just encode a fulltext of the manifest and pass that 228 # just encode a fulltext of the manifest and pass that
221 # through to the revlog layer, and let it handle the delta 229 # through to the revlog layer, and let it handle the delta
222 # process. 230 # process.
223 files = sorted(map) 231 text = map.text()
224 _checkforbidden(files)
225
226 # if this is changed to support newlines in filenames,
227 # be sure to check the templates/ dir again (especially *-raw.tmpl)
228 hex, flags = revlog.hex, map.flags
229 text = ''.join("%s\0%s%s\n" % (f, hex(map[f]), flags(f))
230 for f in files)
231 arraytext = array.array('c', text) 232 arraytext = array.array('c', text)
232 cachedelta = None 233 cachedelta = None
233 234
234 n = self.addrevision(text, transaction, link, p1, p2, cachedelta) 235 n = self.addrevision(text, transaction, link, p1, p2, cachedelta)
235 self._mancache[n] = (map, arraytext) 236 self._mancache[n] = (map, arraytext)