Mercurial > hg
changeset 12886:c25945a148c1 stable
revlog: fix buildtext local scope
buildtext stores its result in _addrevision scope to avoid repeated builds
cachedelta is already visible
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 30 Oct 2010 02:47:34 -0500 |
parents | b5eae8e24e80 |
children | 8ce6240587b1 |
files | mercurial/revlog.py |
diffstat | 1 files changed, 9 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlog.py Sat Oct 30 02:47:24 2010 -0500 +++ b/mercurial/revlog.py Sat Oct 30 02:47:34 2010 -0500 @@ -1157,19 +1157,20 @@ def _addrevision(self, node, text, transaction, link, p1, p2, cachedelta, ifh, dfh): - def buildtext(cachedelta): - if text is not None: - return text + btext = [text] + def buildtext(): + if btext[0] is not None: + return btext[0] # flush any pending writes here so we can read it in revision if dfh: dfh.flush() ifh.flush() basetext = self.revision(self.node(cachedelta[0])) - patchedtext = mdiff.patch(basetext, cachedelta[1]) - chk = hash(patchedtext, p1, p2) + btext[0] = mdiff.patch(basetext, cachedelta[1]) + chk = hash(btext[0], p1, p2) if chk != node: raise RevlogError(_("consistency error in delta")) - return patchedtext + return btext[0] curr = len(self) prev = curr - 1 @@ -1190,7 +1191,7 @@ if cachedelta: cacherev, d = cachedelta if cacherev != deltarev: - text = buildtext(cachedelta) + text = buildtext() d = None if d is None: ptext = self.revision(deltanode) @@ -1210,7 +1211,7 @@ textlen = len(text) if (d is None or dist > textlen * 2 or (self.flags(base) & REVIDX_PUNCHED_FLAG)): - text = buildtext(cachedelta) + text = buildtext() data = compress(text) l = len(data[1]) + len(data[0]) base = curr