# HG changeset patch # User Matt Mackall # Date 1192081611 18000 # Node ID e038738714fd34802cde3b4bcaae9ca0f2b4f0e3 # Parent 56591846f81910e90b209d04568c946ace982a18 revlog: avoid large yields in group() Split large yields so that the downstream consumer (chunkbuffer) will avoid some pain when reading ahead. diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -1096,7 +1096,14 @@ class revlog(object): d = self.revdiff(a, b) yield changegroup.chunkheader(len(meta) + len(d)) yield meta - yield d + if len(d) > 2**20: + pos = 0 + while pos < len(d): + pos2 = pos + 2 ** 18 + yield d[pos:pos2] + pos = pos2 + else: + yield d yield changegroup.closechunk()