From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Sat, 11 May 2019 13:23:46 -0600 Subject: [U-Boot] [PATCH 01/11] patman: Update cros_subprocess to use bytearray In-Reply-To: <20190511192356.96651-1-sjg@chromium.org> References: <20190511192356.96651-1-sjg@chromium.org> Message-ID: <20190511192356.96651-2-sjg@chromium.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 --- 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