mercurial/util.py
changeset 26266 1e042e31bd0c
parent 26201 c5b2074ae8c0
child 26267 eca468b8fae4
equal deleted inserted replaced
26265:077f20eed4b2 26266:1e042e31bd0c
    19 import errno, shutil, sys, tempfile, traceback
    19 import errno, shutil, sys, tempfile, traceback
    20 import re as remod
    20 import re as remod
    21 import os, time, datetime, calendar, textwrap, signal, collections
    21 import os, time, datetime, calendar, textwrap, signal, collections
    22 import imp, socket, urllib
    22 import imp, socket, urllib
    23 import gc
    23 import gc
       
    24 import bz2
       
    25 import zlib
    24 
    26 
    25 if os.name == 'nt':
    27 if os.name == 'nt':
    26     import windows as platform
    28     import windows as platform
    27 else:
    29 else:
    28     import posix as platform
    30     import posix as platform
  2336     pos = path.rfind('/')
  2338     pos = path.rfind('/')
  2337     while pos != -1:
  2339     while pos != -1:
  2338         yield path[:pos]
  2340         yield path[:pos]
  2339         pos = path.rfind('/', 0, pos)
  2341         pos = path.rfind('/', 0, pos)
  2340 
  2342 
       
  2343 # compression utility
       
  2344 
       
  2345 class nocompress(object):
       
  2346     def compress(self, x):
       
  2347         return x
       
  2348     def flush(self):
       
  2349         return ""
       
  2350 
       
  2351 compressors = {
       
  2352     'UN': nocompress,
       
  2353     # lambda to prevent early import
       
  2354     'BZ': lambda: bz2.BZ2Compressor(),
       
  2355     'GZ': lambda: zlib.compressobj(),
       
  2356     }
       
  2357 
       
  2358 def _makedecompressor(decompcls):
       
  2359     def generator(f):
       
  2360         d = decompcls()
       
  2361         for chunk in filechunkiter(f):
       
  2362             yield d.decompress(chunk)
       
  2363     def func(fh):
       
  2364         return chunkbuffer(generator(fh))
       
  2365     return func
       
  2366 
       
  2367 def _bz2():
       
  2368     d = bz2.BZ2Decompressor()
       
  2369     # Bzip2 stream start with BZ, but we stripped it.
       
  2370     # we put it back for good measure.
       
  2371     d.decompress('BZ')
       
  2372     return d
       
  2373 
       
  2374 decompressors = {'UN': lambda fh: fh,
       
  2375                  'BZ': _makedecompressor(_bz2),
       
  2376                  'GZ': _makedecompressor(lambda: zlib.decompressobj()),
       
  2377                  }
       
  2378 
  2341 # convenient shortcut
  2379 # convenient shortcut
  2342 dst = debugstacktrace
  2380 dst = debugstacktrace