36
36
from git .compat import (
37
37
string_types ,
38
38
defenc ,
39
+ force_bytes ,
39
40
PY3 ,
40
41
bchr ,
41
42
# just to satisfy flake8 on py3
@@ -69,10 +70,6 @@ def _bchr(c):
69
70
# Documentation
70
71
## @{
71
72
72
- def _drop_output_handler (line ):
73
- pass
74
-
75
-
76
73
def handle_process_output (process , stdout_handler , stderr_handler , finalizer ):
77
74
"""Registers for notifications to lean that process output is ready to read, and dispatches lines to
78
75
the respective line handlers. We are able to handle carriage returns in case progress is sent by that
@@ -83,13 +80,6 @@ def handle_process_output(process, stdout_handler, stderr_handler, finalizer):
83
80
:param stdout_handler: f(stdout_line_string), or None
84
81
:param stderr_hanlder: f(stderr_line_string), or None
85
82
:param finalizer: f(proc) - wait for proc to finish"""
86
-
87
- log .debug ('handle_process_output( process=%r, stdout_handler=%r, stderr_handler=%r, finalizer=%r'
88
- % (process , stdout_handler , stderr_handler , finalizer ))
89
-
90
- if stdout_handler is None :
91
- stdout_handler = _drop_output_handler
92
-
93
83
fdmap = {process .stdout .fileno (): (stdout_handler , [b'' ]),
94
84
process .stderr .fileno (): (stderr_handler , [b'' ])}
95
85
@@ -130,7 +120,6 @@ def _dispatch_single_line(line, handler):
130
120
# end single line helper
131
121
132
122
def _dispatch_lines (fno , handler , buf_list ):
133
- log .debug ('fno=%d, handler=%r, buf_list=%r' % (fno , handler , buf_list ))
134
123
lc = 0
135
124
for line in _read_lines_from_fno (fno , buf_list ):
136
125
_dispatch_single_line (line , handler )
@@ -325,23 +314,15 @@ def wait(self, stderr=b''):
325
314
:param stderr: Previously read value of stderr, in case stderr is already closed.
326
315
:warn: may deadlock if output or error pipes are used and not handled separately.
327
316
:raise GitCommandError: if the return status is not 0"""
328
-
329
- # stderr must be a bytes object as it will
330
- # combined with more data from the process and
331
- # decoded by the caller
332
317
if stderr is None :
333
318
stderr = b''
334
- elif type (stderr ) == unicode :
335
- stderr = stderr .encode (defenc )
336
-
319
+ stderr = force_bytes (stderr )
320
+
337
321
status = self .proc .wait ()
338
322
339
323
def read_all_from_possibly_closed_stream (stream ):
340
324
try :
341
- last_stderr = stream .read ()
342
- if type (last_stderr ) == unicode :
343
- last_stderr = last_stderr .encode (defenc )
344
- return stderr + last_stderr
325
+ return stderr + force_bytes (stream .read ())
345
326
except ValueError :
346
327
return stderr or b''
347
328
@@ -633,8 +614,8 @@ def execute(self, command,
633
614
cwd = cwd ,
634
615
bufsize = - 1 ,
635
616
stdin = istream ,
636
- stderr = PIPE ,
637
- stdout = PIPE ,
617
+ stderr = PIPE ,
618
+ stdout = PIPE if with_stdout else open ( os . devnull , 'wb' ) ,
638
619
shell = self .USE_SHELL ,
639
620
close_fds = (os .name == 'posix' ), # unsupported on windows
640
621
universal_newlines = universal_newlines ,
0 commit comments