aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-03-07 08:58:19 +1300
committerPaul Eggleton <paul.eggleton@linux.intel.com>2017-03-07 09:02:06 +1300
commit05b85281420b640b6fcc85520d24519731fe295d (patch)
tree9d3464d3f42318ca745fcbde593b24274600c9c3
parent19a559cfa665b1add51fad41b7db88237fa82a09 (diff)
downloadopenembedded-core-contrib-05b85281420b640b6fcc85520d24519731fe295d.tar.gz
update.py: use reader to decode subprocess output correctly
We can't decode UTF-8 characters byte-by-byte, as soon as we hit a character that's more than one byte long then we'll fail. Use a reader object to do it properly. This fixes parsing current meta-angstrom on master. At the same time, specify errors="surrogateescape" to avoid the update process dying at this point in case of characters that aren't valid UTF-8. Thanks to Jiajie Hu <jiajie.hu@intel.com> who fixed this in devtool's very similar code. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-rwxr-xr-xlayerindex/update.py5
1 files changed, 3 insertions, 2 deletions
diff --git a/layerindex/update.py b/layerindex/update.py
index 5ff7fb4ae7..e5987bbad2 100755
--- a/layerindex/update.py
+++ b/layerindex/update.py
@@ -11,6 +11,7 @@
import sys
import os
import optparse
+import codecs
import logging
import subprocess
import signal
@@ -45,10 +46,10 @@ def run_command_interruptible(cmd):
cmd, cwd=os.path.dirname(sys.argv[0]), shell=True, preexec_fn=reenable_sigint, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
+ reader = codecs.getreader('utf-8')(process.stdout, errors='surrogateescape')
buf = ''
while True:
- out = process.stdout.read(1)
- out = out.decode('utf-8')
+ out = reader.read(1, 1)
if out:
sys.stdout.write(out)
sys.stdout.flush()