[Buildroot] [PATCH buildroot-test] scripts/autobuild-run: make it Python 3.x compatible

Thomas Petazzoni thomas.petazzoni at bootlin.com
Tue Dec 3 16:54:57 UTC 2019

With Python 3.7, the autobuild-run did not work due to the following

 - The urlparse module no longer exists, it's not urllib.parse

 - 0022 is no longer recognized as an octal value, we must use 0o022,
   which also works in Python 2.x

 - reading the CSV file with the list of branches through the CSV
   parser failed due to the lack of decoding, as urlopen_closing()
   returns a stream of bytes and not strings. So we need to call
   decode_bytes() on each element of the CSV array. Since the CSV file
   is typically 3 or 4 lines long, we don't really need to optimize

Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
 scripts/autobuild-run | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/scripts/autobuild-run b/scripts/autobuild-run
index 5921edd..e475ea8 100755
--- a/scripts/autobuild-run
+++ b/scripts/autobuild-run
@@ -145,14 +145,15 @@ from distutils.version import StrictVersion
 import platform
 from threading import Thread, Event
 import datetime
-import urlparse
 if sys.hexversion >= 0x3000000:
     import configparser
     import urllib.request as _urllib
+    import urllib.parse as urlparse
     import ConfigParser as configparser
     import urllib2 as _urllib
+    import urlparse
 urlopen = _urllib.urlopen
 urlopen_closing = lambda uri: contextlib.closing(urlopen(uri))
@@ -307,8 +308,10 @@ class Builder:
         list. This way, branches with a higher weight are more likely to
         be selected.
+        csv_branches = []
         with urlopen_closing(urlparse.urljoin(self.http_url, 'branches')) as r:
-            csv_branches = r.readlines()
+            for l in r.readlines():
+                csv_branches.append(decode_bytes(l))
         branches = []
         for branch in csv.reader(csv_branches):
             branches += [branch[0]] * int(branch[1])
@@ -830,7 +833,7 @@ def main():
     # Enforce the sanest umask here, to avoid buildroot doing it on its
     # own and causing a double-make call, thus adding extraneous lines
     # in case of failures.
-    os.umask(0022)
+    os.umask(0o022)
     def sigterm_handler(signum, frame):
         """Kill all children"""

More information about the buildroot mailing list