comparison mercurial/worker.py @ 49217:13dfad0f9f7a

branching: merge stable into default
author Raphaël Gomès <rgomes@octobus.net>
date Wed, 25 May 2022 13:28:24 +0200
parents 642e31cb55f0 2fe4efaa59af
children cdb85d0512b8
comparison
equal deleted inserted replaced
49212:d3d3495a5749 49217:13dfad0f9f7a
64 return min(max(countcpus(), 4), 32) 64 return min(max(countcpus(), 4), 32)
65 65
66 66
67 def ismainthread(): 67 def ismainthread():
68 return threading.current_thread() == threading.main_thread() 68 return threading.current_thread() == threading.main_thread()
69
70
71 class _blockingreader(object):
72 def __init__(self, wrapped):
73 self._wrapped = wrapped
74
75 # Do NOT implement readinto() by making it delegate to
76 # _wrapped.readinto(), since that is unbuffered. The unpickler is fine
77 # with just read() and readline(), so we don't need to implement it.
78
79 if (3, 8, 0) <= sys.version_info[:3] < (3, 8, 2):
80
81 # This is required for python 3.8, prior to 3.8.2. See issue6444.
82 def readinto(self, b):
83 pos = 0
84 size = len(b)
85
86 while pos < size:
87 ret = self._wrapped.readinto(b[pos:])
88 if not ret:
89 break
90 pos += ret
91
92 return pos
93
94 def readline(self):
95 return self._wrapped.readline()
96
97 # issue multiple reads until size is fulfilled
98 def read(self, size=-1):
99 if size < 0:
100 return self._wrapped.readall()
101
102 buf = bytearray(size)
103 view = memoryview(buf)
104 pos = 0
105
106 while pos < size:
107 ret = self._wrapped.readinto(view[pos:])
108 if not ret:
109 break
110 pos += ret
111
112 del view
113 del buf[pos:]
114 return bytes(buf)
69 115
70 116
71 class _blockingreader: 117 class _blockingreader:
72 def __init__(self, wrapped): 118 def __init__(self, wrapped):
73 self._wrapped = wrapped 119 self._wrapped = wrapped