Skip to content

Commit 040f549

Browse files
committed
apveyor, #519: FIX incomplete Popen pump
+ Pump once, so when input larger than `mmap.PAGESIZE`, stream is not emptied.
1 parent d12fdca commit 040f549

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

git/cmd.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,16 @@ def _parse_lines_from_buffer(buf):
100100
# end
101101

102102
def _read_lines_from_fno(fno, last_buf_list):
103-
buf = os.read(fno, mmap.PAGESIZE)
104-
buf = last_buf_list[0] + buf
103+
for buf in iter(lambda: os.read(fno, mmap.PAGESIZE), ''):
104+
buf = last_buf_list[0] + buf
105105

106-
bi = 0
107-
for bi, line in _parse_lines_from_buffer(buf):
108-
yield line
109-
# for each line to parse from the buffer
106+
bi = 0
107+
for bi, line in _parse_lines_from_buffer(buf):
108+
yield line
109+
# for each line to parse from the buffer
110110

111-
# keep remainder
112-
last_buf_list[0] = buf[bi:]
111+
# keep remainder
112+
last_buf_list[0] = buf[bi:]
113113

114114
def _dispatch_single_line(line, handler):
115115
line = line.decode(defenc)
@@ -199,6 +199,7 @@ def _deplete_buffer(fno, handler, buf_list, wg=None):
199199
for fno, (handler, buf_list) in fdmap.items():
200200
wg.add(1)
201201
t = threading.Thread(target=lambda: _deplete_buffer(fno, handler, buf_list, wg))
202+
t.setDaemon(True)
202203
t.start()
203204
# end
204205
# NOTE: Just joining threads can possibly fail as there is a gap between .start() and when it's

git/test/test_git.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,9 @@ def counter_stderr(line):
238238
stdin=None,
239239
stdout=subprocess.PIPE,
240240
stderr=subprocess.PIPE,
241-
shell=False)
241+
shell=False,
242+
creationflags=Git.CREATE_NO_WINDOW if sys.platform == 'win32' else 0,
243+
)
242244

243245
handle_process_output(proc, counter_stdout, counter_stderr, lambda proc: proc.wait())
244246

0 commit comments

Comments
 (0)