[oe-commits] [openembedded-core] 01/15: staging: Ensure dependencies are removed before being added

git at git.openembedded.org git at git.openembedded.org
Sun Aug 27 08:37:18 UTC 2017


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

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

commit 9c872e1a13db642d26a3c0c6518e874277450345
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Sun Aug 27 09:21:10 2017 +0100

    staging: Ensure dependencies are removed before being added
    
    Currently items are added to the sysroot, the obsolete items are removed. If
    a change such as pkgconfig -> pkgconf is made, this leads to conflicts of
    overlapping files in the sysroot.
    
    In order to better support this, handle removing items before adding them.
    This requires some minor refactoring to construct the installed list
    before the main function loop, otherwise there are no changes in this
    patch other than reordering the operations.
    
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 meta/classes/staging.bbclass | 77 ++++++++++++++++++++++----------------------
 1 file changed, 39 insertions(+), 38 deletions(-)

diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass
index 8b833d3..eb06f39 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes/staging.bbclass
@@ -389,8 +389,6 @@ python extend_recipe_sysroot() {
     multilibs = {}
     manifests = {}
 
-    installed = []
-
     for f in os.listdir(depdir):
         if not f.endswith(".complete"):
             continue
@@ -402,16 +400,52 @@ python extend_recipe_sysroot() {
             os.unlink(f)
             os.unlink(f.replace(".complete", ""))
 
+    installed = []
     for dep in configuredeps:
         c = setscenedeps[dep][0]
-        taskhash = setscenedeps[dep][5]
-        taskmanifest = depdir + "/" + c + "." + taskhash
         if mytaskname in ["do_sdk_depends", "do_populate_sdk_ext"] and c.endswith("-initial"):
             bb.note("Skipping initial setscene dependency %s for installation into the sysroot" % c)
             continue
-
         installed.append(c)
 
+    # We want to remove anything which this task previously installed but is no longer a dependency
+    taskindex = depdir + "/" + "index." + mytaskname
+    if os.path.exists(taskindex):
+        potential = []
+        with open(taskindex, "r") as f:
+            for l in f:
+                l = l.strip()
+                if l not in installed:
+                    l = depdir + "/" + l
+                    if not os.path.exists(l):
+                        # Was likely already uninstalled
+                        continue
+                    potential.append(l)
+        # We need to ensure not other task needs this dependency. We hold the sysroot
+        # lock so we ca search the indexes to check
+        if potential:
+            for i in glob.glob(depdir + "/index.*"):
+                if i.endswith("." + mytaskname):
+                    continue
+                with open(i, "r") as f:
+                    for l in f:
+                        l = l.strip()
+                        if l in potential:
+                            potential.remove(l)
+        for l in potential:
+            bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
+            lnk = os.readlink(l)
+            sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
+            os.unlink(l)
+            os.unlink(l + ".complete")
+
+    for dep in configuredeps:
+        c = setscenedeps[dep][0]
+        if c not in installed:
+            continue
+        taskhash = setscenedeps[dep][5]
+        taskmanifest = depdir + "/" + c + "." + taskhash
+
         if os.path.exists(depdir + "/" + c):
             lnk = os.readlink(depdir + "/" + c)
             if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"):
@@ -526,39 +560,6 @@ python extend_recipe_sysroot() {
         c = setscenedeps[dep][0]
         os.symlink(manifests[dep], depdir + "/" + c + ".complete")
 
-    # We want to remove anything which this task previously installed but is no longer a dependency
-    # This could potentially race against another task which also installed it but still requires it
-    # but the alternative is not doing anything at all and that race window should be small enough
-    # to be insignificant
-    taskindex = depdir + "/" + "index." + mytaskname
-    if os.path.exists(taskindex):
-        potential = []
-        with open(taskindex, "r") as f:
-            for l in f:
-                l = l.strip()
-                if l not in installed:
-                    l = depdir + "/" + l
-                    if not os.path.exists(l):
-                        # Was likely already uninstalled
-                        continue
-                    potential.append(l)
-        # We need to ensure not other task needs this dependency. We hold the sysroot
-        # lock so we ca search the indexes to check
-        if potential:
-            for i in glob.glob(depdir + "/index.*"):
-                if i.endswith("." + mytaskname):
-                    continue
-                with open(i, "r") as f:
-                    for l in f:
-                        l = l.strip()
-                        if l in potential:
-                            potential.remove(l)
-        for l in potential:
-            bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
-            lnk = os.readlink(l)
-            sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
-            os.unlink(l)
-            os.unlink(l + ".complete")
     with open(taskindex, "w") as f:
         for l in sorted(installed):
             f.write(l + "\n")

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


More information about the Openembedded-commits mailing list