Mercurial > hg
comparison mercurial/util.py @ 34295:3bb2a9f25fe9
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
author | Mark Thomas <mbthomas@fb.com> |
---|---|
date | Thu, 21 Sep 2017 05:54:34 -0700 |
parents | be00af4a1ac5 |
children | c41444a39de2 |
comparison
equal
deleted
inserted
replaced
34294:05131c963767 | 34295:3bb2a9f25fe9 |
---|---|
24 import datetime | 24 import datetime |
25 import errno | 25 import errno |
26 import gc | 26 import gc |
27 import hashlib | 27 import hashlib |
28 import imp | 28 import imp |
29 import mmap | |
29 import os | 30 import os |
30 import platform as pyplatform | 31 import platform as pyplatform |
31 import re as remod | 32 import re as remod |
32 import shutil | 33 import shutil |
33 import signal | 34 import signal |
404 if not data: | 405 if not data: |
405 self._eof = True | 406 self._eof = True |
406 else: | 407 else: |
407 self._lenbuf += len(data) | 408 self._lenbuf += len(data) |
408 self._buffer.append(data) | 409 self._buffer.append(data) |
410 | |
411 def mmapread(fp): | |
412 try: | |
413 fd = getattr(fp, 'fileno', lambda: fp)() | |
414 return mmap.mmap(fd, 0, access=mmap.ACCESS_READ) | |
415 except ValueError: | |
416 # Empty files cannot be mmapped, but mmapread should still work. Check | |
417 # if the file is empty, and if so, return an empty buffer. | |
418 if os.fstat(fd).st_size == 0: | |
419 return '' | |
420 raise | |
409 | 421 |
410 def popen2(cmd, env=None, newlines=False): | 422 def popen2(cmd, env=None, newlines=False): |
411 # Setting bufsize to -1 lets the system decide the buffer size. | 423 # Setting bufsize to -1 lets the system decide the buffer size. |
412 # The default for bufsize is 0, meaning unbuffered. This leads to | 424 # The default for bufsize is 0, meaning unbuffered. This leads to |
413 # poor performance on Mac OS X: http://bugs.python.org/issue4194 | 425 # poor performance on Mac OS X: http://bugs.python.org/issue4194 |