mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 07:49:11 +03:00
util: add an mmapread method
This is useful for large files that are only partly touched. Test Plan: Will be used and tested in a later patch. Differential Revision: https://phab.mercurial-scm.org/D476
This commit is contained in:
parent
2dc959255a
commit
31b5590f30
@ -26,6 +26,7 @@ import errno
|
||||
import gc
|
||||
import hashlib
|
||||
import imp
|
||||
import mmap
|
||||
import os
|
||||
import platform as pyplatform
|
||||
import re as remod
|
||||
@ -407,6 +408,17 @@ class bufferedinputpipe(object):
|
||||
self._lenbuf += len(data)
|
||||
self._buffer.append(data)
|
||||
|
||||
def mmapread(fp):
|
||||
try:
|
||||
fd = getattr(fp, 'fileno', lambda: fp)()
|
||||
return mmap.mmap(fd, 0, access=mmap.ACCESS_READ)
|
||||
except ValueError:
|
||||
# Empty files cannot be mmapped, but mmapread should still work. Check
|
||||
# if the file is empty, and if so, return an empty buffer.
|
||||
if os.fstat(fd).st_size == 0:
|
||||
return ''
|
||||
raise
|
||||
|
||||
def popen2(cmd, env=None, newlines=False):
|
||||
# Setting bufsize to -1 lets the system decide the buffer size.
|
||||
# The default for bufsize is 0, meaning unbuffered. This leads to
|
||||
|
Loading…
Reference in New Issue
Block a user