diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-11-04 17:27:52 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-11-07 15:12:00 +0000 |
commit | 61f5370c9b4a03950c830e360411090bc323ae55 (patch) | |
tree | bb2c3040717304592124a004ffb627fe69a8d85a /meta/classes | |
parent | d427f58977a46f2bda4b7f30cf83793373e401d3 (diff) | |
download | poky-61f5370c9b4a03950c830e360411090bc323ae55.tar.gz |
staging: Handle files moving between dependencies
Currently, if files move between recipes, do_prepare_sysroot can fail with a message like
Exception: FileExistsError: [Errno 17] File exists:
'TMPDIR/sysroots-components/core2-64/libx11/usr/include/X11/extensions/XKBgeom.h' ->
'TMPDIR/work/core2-64-poky-linux/gtk+3/3.24.8-r0/recipe-sysroot/usr/include/X11/extensions/XKBgeom.h'
This is because files are removed and then added per package. What needs to
happen is all removes need to be processed, then all additions.
This patch changes the code to process in two phases, removals first, then additions,
which avoids the problem.
(From OE-Core rev: e3e5ace6e68d5fe68e4add301a44c1a1b8607411)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/staging.bbclass | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass index 55a9b52ed2..cca0b7e0d6 100644 --- a/meta/classes/staging.bbclass +++ b/meta/classes/staging.bbclass | |||
@@ -449,6 +449,7 @@ python extend_recipe_sysroot() { | |||
449 | msg_exists = [] | 449 | msg_exists = [] |
450 | msg_adding = [] | 450 | msg_adding = [] |
451 | 451 | ||
452 | # Handle all removals first since files may move between recipes | ||
452 | for dep in configuredeps: | 453 | for dep in configuredeps: |
453 | c = setscenedeps[dep][0] | 454 | c = setscenedeps[dep][0] |
454 | if c not in installed: | 455 | if c not in installed: |
@@ -459,7 +460,6 @@ python extend_recipe_sysroot() { | |||
459 | if os.path.exists(depdir + "/" + c): | 460 | if os.path.exists(depdir + "/" + c): |
460 | lnk = os.readlink(depdir + "/" + c) | 461 | lnk = os.readlink(depdir + "/" + c) |
461 | if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"): | 462 | if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"): |
462 | msg_exists.append(c) | ||
463 | continue | 463 | continue |
464 | else: | 464 | else: |
465 | bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash)) | 465 | bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash)) |
@@ -470,6 +470,20 @@ python extend_recipe_sysroot() { | |||
470 | elif os.path.lexists(depdir + "/" + c): | 470 | elif os.path.lexists(depdir + "/" + c): |
471 | os.unlink(depdir + "/" + c) | 471 | os.unlink(depdir + "/" + c) |
472 | 472 | ||
473 | # Now handle installs | ||
474 | for dep in configuredeps: | ||
475 | c = setscenedeps[dep][0] | ||
476 | if c not in installed: | ||
477 | continue | ||
478 | taskhash = setscenedeps[dep][5] | ||
479 | taskmanifest = depdir + "/" + c + "." + taskhash | ||
480 | |||
481 | if os.path.exists(depdir + "/" + c): | ||
482 | lnk = os.readlink(depdir + "/" + c) | ||
483 | if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"): | ||
484 | msg_exists.append(c) | ||
485 | continue | ||
486 | |||
473 | msg_adding.append(c) | 487 | msg_adding.append(c) |
474 | 488 | ||
475 | os.symlink(c + "." + taskhash, depdir + "/" + c) | 489 | os.symlink(c + "." + taskhash, depdir + "/" + c) |