summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xrepo18
1 files changed, 13 insertions, 5 deletions
diff --git a/repo b/repo
index 30bce52b..7771c2d8 100755
--- a/repo
+++ b/repo
@@ -363,15 +363,23 @@ def run_command(cmd, **kwargs):
363 kwargs.setdefault('stderr', subprocess.PIPE) 363 kwargs.setdefault('stderr', subprocess.PIPE)
364 cmd_input = kwargs.pop('input', None) 364 cmd_input = kwargs.pop('input', None)
365 365
366 def decode(output):
367 """Decode |output| to text."""
368 if output is None:
369 return output
370 try:
371 return output.decode('utf-8')
372 except UnicodeError:
373 print('repo: warning: Invalid UTF-8 output:\ncmd: %r\n%r' % (cmd, output),
374 file=sys.stderr)
375 # TODO(vapier): Once we require Python 3, use 'backslashreplace'.
376 return output.decode('utf-8', 'replace')
377
366 # Run & package the results. 378 # Run & package the results.
367 proc = subprocess.Popen(cmd, **kwargs) 379 proc = subprocess.Popen(cmd, **kwargs)
368 (stdout, stderr) = proc.communicate(input=cmd_input) 380 (stdout, stderr) = proc.communicate(input=cmd_input)
369 if stdout is not None:
370 stdout = stdout.decode('utf-8')
371 if stderr is not None:
372 stderr = stderr.decode('utf-8')
373 trace.print(':', ' '.join(cmd)) 381 trace.print(':', ' '.join(cmd))
374 ret = RunResult(proc.returncode, stdout, stderr) 382 ret = RunResult(proc.returncode, decode(stdout), decode(stderr))
375 383
376 # If things failed, print useful debugging output. 384 # If things failed, print useful debugging output.
377 if check and ret.returncode: 385 if check and ret.returncode: