comparison mercurial/httprepo.py @ 3609:a969e81631ce

hgweb: if the server supports it, send a compressed bundle
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Wed, 01 Nov 2006 22:01:30 +0100
parents 802da51cab5b
children cbf352b9a3cd
comparison
equal deleted inserted replaced
3608:802da51cab5b 3609:a969e81631ce
335 335
336 def unbundle(self, cg, heads, source): 336 def unbundle(self, cg, heads, source):
337 # have to stream bundle to a temp file because we do not have 337 # have to stream bundle to a temp file because we do not have
338 # http 1.1 chunked transfer. 338 # http 1.1 chunked transfer.
339 339
340 use_compress = 'standardbundle' in self.capabilities
341
342 # XXX duplication from commands.py
343 class nocompress(object):
344 def compress(self, x):
345 return x
346 def flush(self):
347 return ""
348
349 if use_compress:
350 header = "HG10GZ"
351 z = zlib.compressobj()
352 else:
353 self.ui.note(_("server has no compression support, "
354 "sending uncompressed"))
355 header = ""
356 z = nocompress()
357
340 fd, tempname = tempfile.mkstemp(prefix='hg-unbundle-') 358 fd, tempname = tempfile.mkstemp(prefix='hg-unbundle-')
341 fp = os.fdopen(fd, 'wb+') 359 fp = os.fdopen(fd, 'wb+')
342 try: 360 try:
361 fp.write(header)
343 for chunk in util.filechunkiter(cg): 362 for chunk in util.filechunkiter(cg):
344 fp.write(chunk) 363 fp.write(z.compress(chunk))
364 fp.write(z.flush())
345 length = fp.tell() 365 length = fp.tell()
346 try: 366 try:
347 rfp = self.do_cmd( 367 rfp = self.do_cmd(
348 'unbundle', data=fp, 368 'unbundle', data=fp,
349 headers={'content-length': str(length), 369 headers={'content-length': str(length),