Mercurial > public > mercurial-scm > hg
comparison mercurial/httprepo.py @ 7342:1dcd2cc6878b
protocol: avoid sending outrageously large between requests
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 07 Nov 2008 15:30:25 -0600 |
parents | 810ca383da9c |
children | 1d54e2f6c0b7 |
comparison
equal
deleted
inserted
replaced
7341:6cb522c5d56a | 7342:1dcd2cc6878b |
---|---|
146 return br | 146 return br |
147 except: | 147 except: |
148 raise util.UnexpectedOutput(_("unexpected response:"), d) | 148 raise util.UnexpectedOutput(_("unexpected response:"), d) |
149 | 149 |
150 def between(self, pairs): | 150 def between(self, pairs): |
151 n = " ".join(["-".join(map(hex, p)) for p in pairs]) | 151 batch = 8 # avoid giant requests |
152 d = self.do_read("between", pairs=n) | 152 r = [] |
153 try: | 153 for i in xrange(0, len(pairs), batch): |
154 p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] | 154 n = " ".join(["-".join(map(hex, p)) for p in pairs[i:i + batch]]) |
155 return p | 155 d = self.do_read("between", pairs=n) |
156 except: | 156 try: |
157 raise util.UnexpectedOutput(_("unexpected response:"), d) | 157 r += [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] |
158 except: | |
159 raise util.UnexpectedOutput(_("unexpected response:"), d) | |
160 return r | |
158 | 161 |
159 def changegroup(self, nodes, kind): | 162 def changegroup(self, nodes, kind): |
160 n = " ".join(map(hex, nodes)) | 163 n = " ".join(map(hex, nodes)) |
161 f = self.do_cmd("changegroup", roots=n) | 164 f = self.do_cmd("changegroup", roots=n) |
162 return util.chunkbuffer(zgenerator(f)) | 165 return util.chunkbuffer(zgenerator(f)) |