[U-Boot] [PATCH 01/11] patman: Update cros_subprocess to use bytearray
Simon Glass
sjg at chromium.org
Sat May 11 19:23:46 UTC 2019
At present this function uses lists and strings. This does not work so
well with Python 3, and testing against '' does not work for a bytearray.
Update the code to fix these issues.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
tools/patman/cros_subprocess.py | 33 +++++++++++++++++++++------------
tools/patman/gitutil.py | 2 ++
2 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/tools/patman/cros_subprocess.py b/tools/patman/cros_subprocess.py
index ebd4300dfd..cd19150ee6 100644
--- a/tools/patman/cros_subprocess.py
+++ b/tools/patman/cros_subprocess.py
@@ -156,11 +156,11 @@ class Popen(subprocess.Popen):
self.stdin.close()
if self.stdout:
read_set.append(self.stdout)
- stdout = []
+ stdout = bytearray()
if self.stderr and self.stderr != self.stdout:
read_set.append(self.stderr)
- stderr = []
- combined = []
+ stderr = bytearray()
+ combined = bytearray()
input_offset = 0
while read_set or write_set:
@@ -192,12 +192,12 @@ class Popen(subprocess.Popen):
data = os.read(self.stdout.fileno(), 1024)
except OSError:
pass
- if data == "":
+ if not len(data):
self.stdout.close()
read_set.remove(self.stdout)
else:
- stdout.append(data)
- combined.append(data)
+ stdout += data
+ combined += data
if output:
output(sys.stdout, data)
if self.stderr in rlist:
@@ -207,25 +207,34 @@ class Popen(subprocess.Popen):
data = os.read(self.stderr.fileno(), 1024)
except OSError:
pass
- if data == "":
+ if not len(data):
self.stderr.close()
read_set.remove(self.stderr)
else:
- stderr.append(data)
- combined.append(data)
+ stderr += data
+ combined += data
if output:
output(sys.stderr, data)
# All data exchanged. Translate lists into strings.
if stdout is not None:
- stdout = ''.join(stdout)
+ try:
+ stdout = stdout.decode('utf-8')
+ except UnicodeDecodeError:
+ stdout = stdout.decode('utf-8', 'ignore')
else:
stdout = ''
if stderr is not None:
- stderr = ''.join(stderr)
+ try:
+ stderr = stderr.decode('utf-8')
+ except UnicodeDecodeError:
+ stderr = stderr.decode('utf-8', 'ignore')
else:
stderr = ''
- combined = ''.join(combined)
+ try:
+ combined = combined.decode('utf-8')
+ except UnicodeDecodeError:
+ combined = combined.decode('utf-8', 'ignore')
# Translate newlines, if requested. We cannot let the file
# object do the translation: It is based on stdio, which is
diff --git a/tools/patman/gitutil.py b/tools/patman/gitutil.py
index 9905bb0bbd..7650b51bd5 100644
--- a/tools/patman/gitutil.py
+++ b/tools/patman/gitutil.py
@@ -326,6 +326,8 @@ def BuildEmailList(in_list, tag=None, alias=None, raise_on_error=True):
result = []
for item in raw:
if not item in result:
+ if type(item) == unicode:
+ item = item.encode('utf-8')
result.append(item)
if tag:
return ['%s %s%s%s' % (tag, quote, email, quote) for email in result]
--
2.21.0.1020.gf2820cf01a-goog
More information about the U-Boot
mailing list