mercurial/util.py
changeset 51926 bc9ed92d4753
parent 51885 cbd01bf33802
child 51927 2d51b0cf707c
equal deleted inserted replaced
51925:93d872a06132 51926:bc9ed92d4753
   483         # rather than "zero bytes", so special case that.
   483         # rather than "zero bytes", so special case that.
   484         return b''
   484         return b''
   485     elif size is None:
   485     elif size is None:
   486         size = 0
   486         size = 0
   487     fd = getattr(fp, 'fileno', lambda: fp)()
   487     fd = getattr(fp, 'fileno', lambda: fp)()
   488     flags = mmap.MAP_PRIVATE
   488 
   489     bg_populate = hasattr(osutil, "background_mmap_populate")
   489     if pycompat.iswindows:
   490     if pre_populate and not bg_populate:
   490         _mmap = lambda fd, size: mmap.mmap(fd, size, access=mmap.ACCESS_READ)
   491         flags |= getattr(mmap, 'MAP_POPULATE', 0)
   491     else:
       
   492         flags = mmap.MAP_PRIVATE
       
   493         bg_populate = hasattr(osutil, "background_mmap_populate")
       
   494 
       
   495         if pre_populate and not bg_populate:
       
   496             flags |= getattr(mmap, 'MAP_POPULATE', 0)
       
   497 
       
   498         def _mmap(fd, size) -> mmap.mmap:
       
   499             m = mmap.mmap(fd, size, flags=flags, prot=mmap.PROT_READ)
       
   500             if pre_populate and bg_populate:
       
   501                 osutil.background_mmap_populate(m)
       
   502             return m
       
   503 
   492     try:
   504     try:
   493         m = mmap.mmap(fd, size, flags=flags, prot=mmap.PROT_READ)
   505         return _mmap(fd, size)
   494         if pre_populate and bg_populate:
       
   495             osutil.background_mmap_populate(m)
       
   496         return m
       
   497     except ValueError:
   506     except ValueError:
   498         # Empty files cannot be mmapped, but mmapread should still work.  Check
   507         # Empty files cannot be mmapped, but mmapread should still work.  Check
   499         # if the file is empty, and if so, return an empty buffer.
   508         # if the file is empty, and if so, return an empty buffer.
   500         if os.fstat(fd).st_size == 0:
   509         if os.fstat(fd).st_size == 0:
   501             return b''
   510             return b''