summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorAlexander Kanavin <alex.kanavin@gmail.com>2022-08-01 17:44:33 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-08-23 15:22:52 +0100
commit53019423e471cca2fcaf35709bdc9dc95c4a28dc (patch)
tree0b6e225dcd0dd31e2fdb1de2acc0026e5ef57e1e /scripts
parent58d3e1b89765c7e162c2e39d59fb80e72b59af09 (diff)
downloadpoky-53019423e471cca2fcaf35709bdc9dc95c4a28dc.tar.gz
devtool/upgrade: correctly clean up when recipe filename isn't yet known
There is a coding error in the second invocation of _upgrade_error: rf is passed into it before it is initialized in the try: block. And so bogus recipes are left behind in the workspace, causing breakage. Instead, rewrite the functions to take the recipe directory name in the workspace layer, which can be calculated in advance. (From OE-Core rev: a7d406dce577192f98d76dbae411c72a8b7f07d4) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com> (cherry picked from commit e653996369c1d2b5ac8367ad85f4816d679b6c98) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/lib/devtool/upgrade.py28
1 files changed, 13 insertions, 15 deletions
diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py
index 0357ec07bf..c57015eb40 100644
--- a/scripts/lib/devtool/upgrade.py
+++ b/scripts/lib/devtool/upgrade.py
@@ -119,20 +119,19 @@ def _write_append(rc, srctree, same_dir, no_same_dir, rev, copied, workspace, d)
119 f.write('# original_files: %s\n' % ' '.join(copied)) 119 f.write('# original_files: %s\n' % ' '.join(copied))
120 return af 120 return af
121 121
122def _cleanup_on_error(rf, srctree): 122def _cleanup_on_error(rd, srctree):
123 rfp = os.path.split(rf)[0] # recipe folder 123 rdp = os.path.split(rd)[0] # recipes folder
124 rfpp = os.path.split(rfp)[0] # recipes folder 124 if os.path.exists(rd):
125 if os.path.exists(rfp): 125 shutil.rmtree(rd)
126 shutil.rmtree(rfp) 126 if not len(os.listdir(rdp)):
127 if not len(os.listdir(rfpp)): 127 os.rmdir(rdp)
128 os.rmdir(rfpp)
129 srctree = os.path.abspath(srctree) 128 srctree = os.path.abspath(srctree)
130 if os.path.exists(srctree): 129 if os.path.exists(srctree):
131 shutil.rmtree(srctree) 130 shutil.rmtree(srctree)
132 131
133def _upgrade_error(e, rf, srctree, keep_failure=False, extramsg=None): 132def _upgrade_error(e, rd, srctree, keep_failure=False, extramsg=None):
134 if rf and not keep_failure: 133 if not keep_failure:
135 _cleanup_on_error(rf, srctree) 134 _cleanup_on_error(rd, srctree)
136 logger.error(e) 135 logger.error(e)
137 if extramsg: 136 if extramsg:
138 logger.error(extramsg) 137 logger.error(extramsg)
@@ -426,7 +425,7 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, src
426 try: 425 try:
427 rd = tinfoil.parse_recipe_file(fullpath, False) 426 rd = tinfoil.parse_recipe_file(fullpath, False)
428 except bb.tinfoil.TinfoilCommandFailed as e: 427 except bb.tinfoil.TinfoilCommandFailed as e:
429 _upgrade_error(e, fullpath, srctree, keep_failure, 'Parsing of upgraded recipe failed') 428 _upgrade_error(e, os.path.dirname(fullpath), srctree, keep_failure, 'Parsing of upgraded recipe failed')
430 oe.recipeutils.patch_recipe(rd, fullpath, newvalues) 429 oe.recipeutils.patch_recipe(rd, fullpath, newvalues)
431 430
432 return fullpath, copied 431 return fullpath, copied
@@ -568,10 +567,9 @@ def upgrade(args, config, basepath, workspace):
568 new_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or "")) 567 new_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or ""))
569 license_diff = _generate_license_diff(old_licenses, new_licenses) 568 license_diff = _generate_license_diff(old_licenses, new_licenses)
570 rf, copied = _create_new_recipe(args.version, md5, sha256, args.srcrev, srcbranch, srcsubdir1, srcsubdir2, config.workspace_path, tinfoil, rd, license_diff, new_licenses, srctree, args.keep_failure) 569 rf, copied = _create_new_recipe(args.version, md5, sha256, args.srcrev, srcbranch, srcsubdir1, srcsubdir2, config.workspace_path, tinfoil, rd, license_diff, new_licenses, srctree, args.keep_failure)
571 except bb.process.CmdError as e: 570 except (bb.process.CmdError, DevtoolError) as e:
572 _upgrade_error(e, rf, srctree, args.keep_failure) 571 recipedir = os.path.join(config.workspace_path, 'recipes', rd.getVar('BPN'))
573 except DevtoolError as e: 572 _upgrade_error(e, recipedir, srctree, args.keep_failure)
574 _upgrade_error(e, rf, srctree, args.keep_failure)
575 standard._add_md5(config, pn, os.path.dirname(rf)) 573 standard._add_md5(config, pn, os.path.dirname(rf))
576 574
577 af = _write_append(rf, srctree_s, args.same_dir, args.no_same_dir, rev2, 575 af = _write_append(rf, srctree_s, args.same_dir, args.no_same_dir, rev2,