Mercurial > public > mercurial-scm > hg
diff mercurial/manifest.py @ 3196:f3b939444c72
Abstract manifest block parsing.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Fri, 29 Sep 2006 13:00:54 -0700 |
parents | adb246ce6736 |
children | 53e843840349 |
line wrap: on
line diff
--- a/mercurial/manifest.py Fri Sep 29 13:00:36 2006 -0700 +++ b/mercurial/manifest.py Fri Sep 29 13:00:54 2006 -0700 @@ -9,6 +9,7 @@ from i18n import gettext as _ from demandload import * demandload(globals(), "array bisect struct") +demandload(globals(), "mdiff") class manifestdict(dict): def __init__(self, mapping=None, flags=None): @@ -42,16 +43,25 @@ revlog.__init__(self, opener, "00manifest.i", "00manifest.d", defversion) + def parselines(self, lines): + for l in lines.splitlines(1): + yield l.split('\0') + + def readdelta(self, node): + delta = mdiff.patchtext(self.delta(node)) + deltamap = manifestdict() + for f, n in self.parselines(delta): + deltamap.rawset(f, n) + return deltamap + def read(self, node): if node == nullid: return manifestdict() # don't upset local cache if self.mapcache and self.mapcache[0] == node: return self.mapcache[1] text = self.revision(node) self.listcache = array.array('c', text) - lines = text.splitlines(1) mapping = manifestdict() - for l in lines: - (f, n) = l.split('\0') + for f, n in self.parselines(text): mapping.rawset(f, n) self.mapcache = (node, mapping) return mapping