Mercurial > hg
changeset 44868:3aed7d262bdf
cleanup: remove compatibility code for Python < 2.7.4
The minimum supported Python version was recently raised to 2.7.4.
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Fri, 29 May 2020 04:06:16 +0200 |
parents | 8e8fd938ca07 |
children | 4313a0d7540d |
files | mercurial/util.py |
diffstat | 1 files changed, 3 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/util.py Fri May 29 03:56:07 2020 +0200 +++ b/mercurial/util.py Fri May 29 04:06:16 2020 +0200 @@ -2844,7 +2844,7 @@ # [1]: fixed by changeset 67dc99a989cd in the cpython hg repo. # # Here we workaround the EINTR issue for fileobj.__iter__. Other methods - # like "read*" are ignored for now, as Python < 2.7.4 is a minority. + # like "read*" work fine, as we do not support Python < 2.7.4. # # Although we can workaround the EINTR issue for fp.__iter__, it is slower: # "for x in fp" is 4x faster than "for x in iter(fp.readline, '')" in @@ -2856,39 +2856,6 @@ # affects things like pipes, sockets, ttys etc. We treat "normal" (S_ISREG) # files approximately as "fast" files and use the fast (unsafe) code path, # to minimize the performance impact. - if sys.version_info >= (2, 7, 4): - # fp.readline deals with EINTR correctly, use it as a workaround. - def _safeiterfile(fp): - return iter(fp.readline, b'') - - else: - # fp.read* are broken too, manually deal with EINTR in a stupid way. - # note: this may block longer than necessary because of bufsize. - def _safeiterfile(fp, bufsize=4096): - fd = fp.fileno() - line = b'' - while True: - try: - buf = os.read(fd, bufsize) - except OSError as ex: - # os.read only raises EINTR before any data is read - if ex.errno == errno.EINTR: - continue - else: - raise - line += buf - if b'\n' in buf: - splitted = line.splitlines(True) - line = b'' - for l in splitted: - if l[-1] == b'\n': - yield l - else: - line = l - if not buf: - break - if line: - yield line def iterfile(fp): fastpath = True @@ -2897,7 +2864,8 @@ if fastpath: return fp else: - return _safeiterfile(fp) + # fp.readline deals with EINTR correctly, use it as a workaround. + return iter(fp.readline, b'') else: