[oe-commits] [openembedded-core] 22/62: lib/oe/copy_buildsystem: fix merging sstate directories for eSDK

git at git.openembedded.org git at git.openembedded.org
Wed Aug 17 09:36:39 UTC 2016


rpurdie pushed a commit to branch master
in repository openembedded-core.

commit 2b5b920c6b4f4d5c243192aa75beff402fd704d3
Author: Paul Eggleton <paul.eggleton at linux.intel.com>
AuthorDate: Thu Aug 11 16:45:02 2016 +1200

    lib/oe/copy_buildsystem: fix merging sstate directories for eSDK
    
    When we don't have uninative enabled there's more merging to be done in
    the default configuration (SDK_EXT_TYPE = "full" which by default means
    SDK_INCLUDE_TOOLCHAIN = "1") and there are likely files that already
    exist in the sstate feed we're assembling, so we need to take care to
    merge the directory contents rather than just moving the directories
    over. Additionally we now only run this if uninative genuinely isn't
    enabled (i.e. NATIVELSBSTRING is different to the fixed value of
    "universal".)
    
    In the process of fixing this I discovered an unusual behaviour in
    os.rename() - when we're merging these feeds we're dealing with
    hard-linked sstate artifacts, and whilst os.rename() is supposed to
    silently overwrite an existing destination (permissions allowing), if
    you have the source and destination as hardlinks to the same file then
    the os.rename() call will just silently fail. As a result the code now
    just checks if the destination exists and deletes the source if so
    (since we know it will be the same file, we don't need to check in this
    case.)
    
    Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
    Signed-off-by: Ross Burton <ross.burton at intel.com>
---
 meta/lib/oe/copy_buildsystem.py | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/meta/lib/oe/copy_buildsystem.py b/meta/lib/oe/copy_buildsystem.py
index 4d3faf6..3d5a746 100644
--- a/meta/lib/oe/copy_buildsystem.py
+++ b/meta/lib/oe/copy_buildsystem.py
@@ -201,21 +201,25 @@ def merge_lockedsigs(copy_tasks, lockedsigs_main, lockedsigs_extra, merged_outpu
         write_sigs_file(merged_output, arch_order, merged)
 
 def create_locked_sstate_cache(lockedsigs, input_sstate_cache, output_sstate_cache, d, fixedlsbstring="", filterfile=None):
+    import shutil
     bb.note('Generating sstate-cache...')
 
     nativelsbstring = d.getVar('NATIVELSBSTRING', True)
     bb.process.run("gen-lockedsig-cache %s %s %s %s %s" % (lockedsigs, input_sstate_cache, output_sstate_cache, nativelsbstring, filterfile or ''))
-    if fixedlsbstring:
+    if fixedlsbstring and nativelsbstring != fixedlsbstring:
         nativedir = output_sstate_cache + '/' + nativelsbstring
         if os.path.isdir(nativedir):
             destdir = os.path.join(output_sstate_cache, fixedlsbstring)
-            bb.utils.mkdirhier(destdir)
-
-            dirlist = os.listdir(nativedir)
-            for i in dirlist:
-                src = os.path.join(nativedir, i)
-                dest = os.path.join(destdir, i)
-                os.rename(src, dest)
+            for root, _, files in os.walk(nativedir):
+                for fn in files:
+                    src = os.path.join(root, fn)
+                    dest = os.path.join(destdir, os.path.relpath(src, nativedir))
+                    if os.path.exists(dest):
+                        # Already exists, and it'll be the same file, so just delete it
+                        os.unlink(src)
+                    else:
+                        bb.utils.mkdirhier(os.path.dirname(dest))
+                        shutil.move(src, dest)
 
 def check_sstate_task_list(d, targets, filteroutfile, cmdprefix='', cwd=None, logfile=None):
     import subprocess

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


More information about the Openembedded-commits mailing list