summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Kjellerstedt <peter.kjellerstedt@axis.com>2023-12-06 21:55:30 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-12-08 16:58:34 +0000
commitdd2fb8f00acedf758f51a5afa7f04e5bc24ad15f (patch)
tree075f8da4aa59841b9d732f8feb22d287cb0fb714
parent45d2f8d4bc2ca7c16379334a93ea172a538a6bb2 (diff)
downloadpoky-dd2fb8f00acedf758f51a5afa7f04e5bc24ad15f.tar.gz
devtool: upgrade: Update all existing checksums for the SRC_URI
In addition to updating the sha256sum and removing the md5sum, update all other existing checksums. If the only existing checksum is md5sum, then replace it with the default expected checksums (currently only sha256sum). (From OE-Core rev: 8ea8827ee49b7f0443b1c4bd47d1344a689d73a3) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb16
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded15
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb22
-rw-r--r--meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded19
-rw-r--r--meta/lib/oeqa/selftest/cases/devtool.py48
-rw-r--r--scripts/lib/devtool/upgrade.py51
6 files changed, 148 insertions, 23 deletions
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb
new file mode 100644
index 0000000000..69c0d351ec
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb
@@ -0,0 +1,16 @@
1SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
2LICENSE = "Artistic-2.0"
3LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
4
5SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
6UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
7RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
8
9SRC_URI[md5sum] = "9365d86bd884222b4bf1039b5a9ed1bd"
10
11S = "${WORKDIR}/pv-${PV}"
12
13EXCLUDE_FROM_WORLD = "1"
14
15inherit autotools
16
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded
new file mode 100644
index 0000000000..3ce7e85e10
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded
@@ -0,0 +1,15 @@
1SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
2LICENSE = "Artistic-2.0"
3LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
4
5SRC_URI[sha256sum] = "9dd45391806b0ed215abee4c5ac1597d018c386fe9c1f5afd2f6bc3b07fd82c3"
6SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
7UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
8RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
9
10S = "${WORKDIR}/pv-${PV}"
11
12EXCLUDE_FROM_WORLD = "1"
13
14inherit autotools
15
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb
new file mode 100644
index 0000000000..9abf80e6ed
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb
@@ -0,0 +1,22 @@
1SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
2LICENSE = "Artistic-2.0"
3LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
4
5SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
6UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
7RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
8
9SRC_URI[md5sum] = "9365d86bd884222b4bf1039b5a9ed1bd"
10SRC_URI[sha1sum] = "63a0801350e812541c7f8e9ad74e0d6b629d0b39"
11SRC_URI[sha256sum] = "681bcca9784bf3cb2207e68236d1f68e2aa7b80f999b5750dc77dcd756e81fbc"
12SRC_URI[sha384sum] = "5fff6390465ff23dbf573fcf39dfad3aed2f92074a35e6c02abe58b7678858d90fa6572ff4cb56df8b3e217c739cdbe3"
13SRC_URI[sha512sum] = "32efe7071a363f547afc74e96774f711795edda1d2702823a347d0f9953e859b7d8c45b3e63e18ffb9e0d5ed5910be652d7d727c8676e81b6cb3aed0b13aec00"
14
15PR = "r5"
16
17S = "${WORKDIR}/pv-${PV}"
18
19EXCLUDE_FROM_WORLD = "1"
20
21inherit autotools
22
diff --git a/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded
new file mode 100644
index 0000000000..cd2a0842f4
--- /dev/null
+++ b/meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded
@@ -0,0 +1,19 @@
1SUMMARY = "Pipe viewer test recipe for devtool upgrade test"
2LICENSE = "Artistic-2.0"
3LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
4
5SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz"
6UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
7RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade feature"
8
9SRC_URI[sha1sum] = "395ce62f4f3e035b86c77038f04b96c5aa233595"
10SRC_URI[sha256sum] = "9dd45391806b0ed215abee4c5ac1597d018c386fe9c1f5afd2f6bc3b07fd82c3"
11SRC_URI[sha384sum] = "218c8d2d097aeba5310be759bc20573f18ffa0b11701eac6dd2e7e14ddf13c6e0e094ca7ca026eaa05ef92a056402e36"
12SRC_URI[sha512sum] = "1cf9d7376fceefcd594d0a8b591afc8e11ce89f7210d10ad74438974ecebe9cc5d9ec4db9cc79e0566bfd2b0278c0cc263c07547803e7536432cd1ffd32d8a45"
13
14S = "${WORKDIR}/pv-${PV}"
15
16EXCLUDE_FROM_WORLD = "1"
17
18inherit autotools
19
diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py
index fd9ac42168..47353dadff 100644
--- a/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/meta/lib/oeqa/selftest/cases/devtool.py
@@ -1883,6 +1883,54 @@ class DevtoolUpgradeTests(DevtoolBase):
1883 self.assertNotIn(recipe, result.output) 1883 self.assertNotIn(recipe, result.output)
1884 self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after resetting') 1884 self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after resetting')
1885 1885
1886 def test_devtool_upgrade_drop_md5sum(self):
1887 # Check preconditions
1888 self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
1889 self.track_for_cleanup(self.workspacedir)
1890 self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
1891 # For the moment, we are using a real recipe.
1892 recipe = 'devtool-upgrade-test3'
1893 version = '1.6.0'
1894 oldrecipefile = get_bb_var('FILE', recipe)
1895 tempdir = tempfile.mkdtemp(prefix='devtoolqa')
1896 self.track_for_cleanup(tempdir)
1897 # Check upgrade. Code does not check if new PV is older or newer that current PV, so, it may be that
1898 # we are downgrading instead of upgrading.
1899 result = runCmd('devtool upgrade %s %s -V %s' % (recipe, tempdir, version))
1900 # Check new recipe file is present
1901 newrecipefile = os.path.join(self.workspacedir, 'recipes', recipe, '%s_%s.bb' % (recipe, version))
1902 self.assertExists(newrecipefile, 'Recipe file should exist after upgrade')
1903 # Check recipe got changed as expected
1904 with open(oldrecipefile + '.upgraded', 'r') as f:
1905 desiredlines = f.readlines()
1906 with open(newrecipefile, 'r') as f:
1907 newlines = f.readlines()
1908 self.assertEqual(desiredlines, newlines)
1909
1910 def test_devtool_upgrade_all_checksums(self):
1911 # Check preconditions
1912 self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
1913 self.track_for_cleanup(self.workspacedir)
1914 self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
1915 # For the moment, we are using a real recipe.
1916 recipe = 'devtool-upgrade-test4'
1917 version = '1.6.0'
1918 oldrecipefile = get_bb_var('FILE', recipe)
1919 tempdir = tempfile.mkdtemp(prefix='devtoolqa')
1920 self.track_for_cleanup(tempdir)
1921 # Check upgrade. Code does not check if new PV is older or newer that current PV, so, it may be that
1922 # we are downgrading instead of upgrading.
1923 result = runCmd('devtool upgrade %s %s -V %s' % (recipe, tempdir, version))
1924 # Check new recipe file is present
1925 newrecipefile = os.path.join(self.workspacedir, 'recipes', recipe, '%s_%s.bb' % (recipe, version))
1926 self.assertExists(newrecipefile, 'Recipe file should exist after upgrade')
1927 # Check recipe got changed as expected
1928 with open(oldrecipefile + '.upgraded', 'r') as f:
1929 desiredlines = f.readlines()
1930 with open(newrecipefile, 'r') as f:
1931 newlines = f.readlines()
1932 self.assertEqual(desiredlines, newlines)
1933
1886 def test_devtool_layer_plugins(self): 1934 def test_devtool_layer_plugins(self):
1887 """Test that devtool can use plugins from other layers. 1935 """Test that devtool can use plugins from other layers.
1888 1936
diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py
index 10827a762b..a98370bc10 100644
--- a/scripts/lib/devtool/upgrade.py
+++ b/scripts/lib/devtool/upgrade.py
@@ -192,8 +192,7 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
192 __run('git submodule foreach \'git tag -f devtool-base-new\'') 192 __run('git submodule foreach \'git tag -f devtool-base-new\'')
193 (stdout, _) = __run('git submodule --quiet foreach \'echo $sm_path\'') 193 (stdout, _) = __run('git submodule --quiet foreach \'echo $sm_path\'')
194 paths += [os.path.join(srctree, p) for p in stdout.splitlines()] 194 paths += [os.path.join(srctree, p) for p in stdout.splitlines()]
195 md5 = None 195 checksums = {}
196 sha256 = None
197 _, _, _, _, _, params = bb.fetch2.decodeurl(uri) 196 _, _, _, _, _, params = bb.fetch2.decodeurl(uri)
198 srcsubdir_rel = params.get('destsuffix', 'git') 197 srcsubdir_rel = params.get('destsuffix', 'git')
199 if not srcbranch: 198 if not srcbranch:
@@ -226,9 +225,6 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
226 if ftmpdir and keep_temp: 225 if ftmpdir and keep_temp:
227 logger.info('Fetch temp directory is %s' % ftmpdir) 226 logger.info('Fetch temp directory is %s' % ftmpdir)
228 227
229 md5 = checksums['md5sum']
230 sha256 = checksums['sha256sum']
231
232 tmpsrctree = _get_srctree(tmpdir) 228 tmpsrctree = _get_srctree(tmpdir)
233 srctree = os.path.abspath(srctree) 229 srctree = os.path.abspath(srctree)
234 srcsubdir_rel = os.path.relpath(tmpsrctree, tmpdir) 230 srcsubdir_rel = os.path.relpath(tmpsrctree, tmpdir)
@@ -297,7 +293,7 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, srcbranch, branch, kee
297 if tmpdir != tmpsrctree: 293 if tmpdir != tmpsrctree:
298 shutil.rmtree(tmpdir) 294 shutil.rmtree(tmpdir)
299 295
300 return (revs, md5, sha256, srcbranch, srcsubdir_rel) 296 return (revs, checksums, srcbranch, srcsubdir_rel)
301 297
302def _add_license_diff_to_recipe(path, diff): 298def _add_license_diff_to_recipe(path, diff):
303 notice_text = """# FIXME: the LIC_FILES_CHKSUM values have been updated by 'devtool upgrade'. 299 notice_text = """# FIXME: the LIC_FILES_CHKSUM values have been updated by 'devtool upgrade'.
@@ -318,7 +314,7 @@ def _add_license_diff_to_recipe(path, diff):
318 f.write("\n#\n\n".encode()) 314 f.write("\n#\n\n".encode())
319 f.write(orig_content) 315 f.write(orig_content)
320 316
321def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, srcsubdir_new, workspace, tinfoil, rd, license_diff, new_licenses, srctree, keep_failure): 317def _create_new_recipe(newpv, checksums, srcrev, srcbranch, srcsubdir_old, srcsubdir_new, workspace, tinfoil, rd, license_diff, new_licenses, srctree, keep_failure):
322 """Creates the new recipe under workspace""" 318 """Creates the new recipe under workspace"""
323 319
324 bpn = rd.getVar('BPN') 320 bpn = rd.getVar('BPN')
@@ -390,30 +386,39 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, src
390 addnames.append(params['name']) 386 addnames.append(params['name'])
391 # Find what's been set in the original recipe 387 # Find what's been set in the original recipe
392 oldnames = [] 388 oldnames = []
389 oldsums = []
393 noname = False 390 noname = False
394 for varflag in rd.getVarFlags('SRC_URI'): 391 for varflag in rd.getVarFlags('SRC_URI'):
395 if varflag.endswith(('.md5sum', '.sha256sum')): 392 for checksum in checksums:
396 name = varflag.rsplit('.', 1)[0] 393 if varflag.endswith('.' + checksum):
397 if name not in oldnames: 394 name = varflag.rsplit('.', 1)[0]
398 oldnames.append(name) 395 if name not in oldnames:
399 elif varflag in ['md5sum', 'sha256sum']: 396 oldnames.append(name)
400 noname = True 397 oldsums.append(checksum)
398 elif varflag == checksum:
399 noname = True
400 oldsums.append(checksum)
401 # Even if SRC_URI has named entries it doesn't have to actually use the name 401 # Even if SRC_URI has named entries it doesn't have to actually use the name
402 if noname and addnames and addnames[0] not in oldnames: 402 if noname and addnames and addnames[0] not in oldnames:
403 addnames = [] 403 addnames = []
404 # Drop any old names (the name actually might include ${PV}) 404 # Drop any old names (the name actually might include ${PV})
405 for name in oldnames: 405 for name in oldnames:
406 if name not in newnames: 406 if name not in newnames:
407 newvalues['SRC_URI[%s.md5sum]' % name] = None 407 for checksum in oldsums:
408 newvalues['SRC_URI[%s.sha256sum]' % name] = None 408 newvalues['SRC_URI[%s.%s]' % (name, checksum)] = None
409 409
410 if sha256: 410 nameprefix = '%s.' % addnames[0] if addnames else ''
411 if addnames: 411
412 nameprefix = '%s.' % addnames[0] 412 # md5sum is deprecated, remove any traces of it. If it was the only old
413 else: 413 # checksum, then replace it with the default checksums.
414 nameprefix = '' 414 if 'md5sum' in oldsums:
415 newvalues['SRC_URI[%smd5sum]' % nameprefix] = None 415 newvalues['SRC_URI[%smd5sum]' % nameprefix] = None
416 newvalues['SRC_URI[%ssha256sum]' % nameprefix] = sha256 416 oldsums.remove('md5sum')
417 if not oldsums:
418 oldsums = ["%ssum" % s for s in bb.fetch2.SHOWN_CHECKSUM_LIST]
419
420 for checksum in oldsums:
421 newvalues['SRC_URI[%s%s]' % (nameprefix, checksum)] = checksums[checksum]
417 422
418 if srcsubdir_new != srcsubdir_old: 423 if srcsubdir_new != srcsubdir_old:
419 s_subdir_old = os.path.relpath(os.path.abspath(rd.getVar('S')), rd.getVar('WORKDIR')) 424 s_subdir_old = os.path.relpath(os.path.abspath(rd.getVar('S')), rd.getVar('WORKDIR'))
@@ -571,12 +576,12 @@ def upgrade(args, config, basepath, workspace):
571 rev1, srcsubdir1 = standard._extract_source(srctree, False, 'devtool-orig', False, config, basepath, workspace, args.fixed_setup, rd, tinfoil, no_overrides=args.no_overrides) 576 rev1, srcsubdir1 = standard._extract_source(srctree, False, 'devtool-orig', False, config, basepath, workspace, args.fixed_setup, rd, tinfoil, no_overrides=args.no_overrides)
572 old_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or "")) 577 old_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or ""))
573 logger.info('Extracting upgraded version source...') 578 logger.info('Extracting upgraded version source...')
574 rev2, md5, sha256, srcbranch, srcsubdir2 = _extract_new_source(args.version, srctree, args.no_patch, 579 rev2, checksums, srcbranch, srcsubdir2 = _extract_new_source(args.version, srctree, args.no_patch,
575 args.srcrev, args.srcbranch, args.branch, args.keep_temp, 580 args.srcrev, args.srcbranch, args.branch, args.keep_temp,
576 tinfoil, rd) 581 tinfoil, rd)
577 new_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or "")) 582 new_licenses = _extract_licenses(srctree_s, (rd.getVar('LIC_FILES_CHKSUM') or ""))
578 license_diff = _generate_license_diff(old_licenses, new_licenses) 583 license_diff = _generate_license_diff(old_licenses, new_licenses)
579 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) 584 rf, copied = _create_new_recipe(args.version, checksums, args.srcrev, srcbranch, srcsubdir1, srcsubdir2, config.workspace_path, tinfoil, rd, license_diff, new_licenses, srctree, args.keep_failure)
580 except (bb.process.CmdError, DevtoolError) as e: 585 except (bb.process.CmdError, DevtoolError) as e:
581 recipedir = os.path.join(config.workspace_path, 'recipes', rd.getVar('BPN')) 586 recipedir = os.path.join(config.workspace_path, 'recipes', rd.getVar('BPN'))
582 _upgrade_error(e, recipedir, srctree, args.keep_failure) 587 _upgrade_error(e, recipedir, srctree, args.keep_failure)