[oe-commits] [bitbake] 01/02: cooker: fix watching directories with Python 3.6+

git at git.openembedded.org git at git.openembedded.org
Tue Oct 31 09:10:17 UTC 2017


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch 1.36
in repository bitbake.

commit d57c4718a3a1eb7b8397085c307fcb0bec6454ef
Author: Paul Eggleton <paul.eggleton at linux.intel.com>
AuthorDate: Thu Oct 19 16:32:21 2017 +1300

    cooker: fix watching directories with Python 3.6+
    
    In Python 3.6, glob.glob() was reimplemented to use os.scandir() (which
    itself appeared in Python 3.5), thus our monkey patching of os.listdir()
    here was no longer effective. The end result was not only that bitbake
    wouldn't notice added recipes or bbappends with BB_SERVER_TIMEOUT set
    when being run with Python 3.6 (the shipped Python version on Fedora 26
    and some other distribution versions), it also broke devtool modify,
    devtool upgrade and devtool extract since they rely on the ability to
    create a bbappend on the fly and have bitbake pick it up.
    
    To fix it, do the same monkey patching for os.scandir(), which needs to
    be conditional upon that actually existing since we have to support
    Python 3.4 that doesn't have it. Long term we should probably look for a
    better way to handle this that doesn't involve monkey patching Python
    library code.
    
    Fixes [YOCTO #12185].
    
    Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 lib/bb/cooker.py | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index 73a2fef..c7fdd72 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -1686,15 +1686,23 @@ class CookerCollectFiles(object):
 
         # We need to track where we look so that we can add inotify watches. There
         # is no nice way to do this, this is horrid. We intercept the os.listdir()
-        # calls while we run glob().
+        # (or os.scandir() for python 3.6+) calls while we run glob().
         origlistdir = os.listdir
+        if hasattr(os, 'scandir'):
+            origscandir = os.scandir
         searchdirs = []
 
         def ourlistdir(d):
             searchdirs.append(d)
             return origlistdir(d)
 
+        def ourscandir(d):
+            searchdirs.append(d)
+            return origscandir(d)
+
         os.listdir = ourlistdir
+        if hasattr(os, 'scandir'):
+            os.scandir = ourscandir
         try:
             # Can't use set here as order is important
             newfiles = []
@@ -1714,6 +1722,8 @@ class CookerCollectFiles(object):
                             newfiles.append(g)
         finally:
             os.listdir = origlistdir
+            if hasattr(os, 'scandir'):
+                os.scandir = origscandir
 
         bbmask = config.getVar('BBMASK')
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list