I wonder if we should start using sha512sum along with sha256sum as default with devtool upgrade and skip others.
On Wed, Dec 6, 2023 at 11:22 AM Peter Kjellerstedt <peter.kjellerst...@axis.com> wrote: > > Rather than only updating the sha256sum and removing the md5sum, update > all existing checksums. If the only existing checksum is md5sum, then > replace it with the default expected checksums. > > Signed-off-by: Peter Kjellerstedt <peter.kjellerst...@axis.com> > --- > .../devtool/devtool-upgrade-test3_1.5.3.bb | 16 ++++++ > .../devtool-upgrade-test3_1.5.3.bb.upgraded | 15 ++++++ > .../devtool/devtool-upgrade-test4_1.5.3.bb | 22 ++++++++ > .../devtool-upgrade-test4_1.5.3.bb.upgraded | 19 +++++++ > meta/lib/oeqa/selftest/cases/devtool.py | 48 +++++++++++++++++ > scripts/lib/devtool/upgrade.py | 51 ++++++++++--------- > 6 files changed, 148 insertions(+), 23 deletions(-) > create mode 100644 > meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb > create mode 100644 > meta-selftest/recipes-test/devtool/devtool-upgrade-test3_1.5.3.bb.upgraded > create mode 100644 > meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb > create mode 100644 > meta-selftest/recipes-test/devtool/devtool-upgrade-test4_1.5.3.bb.upgraded > > 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 @@ > +SUMMARY = "Pipe viewer test recipe for devtool upgrade test" > +LICENSE = "Artistic-2.0" > +LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02" > + > +SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz" > +UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml" > +RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade > feature" > + > +SRC_URI[md5sum] = "9365d86bd884222b4bf1039b5a9ed1bd" > + > +S = "${WORKDIR}/pv-${PV}" > + > +EXCLUDE_FROM_WORLD = "1" > + > +inherit autotools > + > 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 @@ > +SUMMARY = "Pipe viewer test recipe for devtool upgrade test" > +LICENSE = "Artistic-2.0" > +LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02" > + > +SRC_URI[sha256sum] = > "9dd45391806b0ed215abee4c5ac1597d018c386fe9c1f5afd2f6bc3b07fd82c3" > +SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz" > +UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml" > +RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade > feature" > + > +S = "${WORKDIR}/pv-${PV}" > + > +EXCLUDE_FROM_WORLD = "1" > + > +inherit autotools > + > 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 @@ > +SUMMARY = "Pipe viewer test recipe for devtool upgrade test" > +LICENSE = "Artistic-2.0" > +LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02" > + > +SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz" > +UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml" > +RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade > feature" > + > +SRC_URI[md5sum] = "9365d86bd884222b4bf1039b5a9ed1bd" > +SRC_URI[sha1sum] = "63a0801350e812541c7f8e9ad74e0d6b629d0b39" > +SRC_URI[sha256sum] = > "681bcca9784bf3cb2207e68236d1f68e2aa7b80f999b5750dc77dcd756e81fbc" > +SRC_URI[sha384sum] = > "5fff6390465ff23dbf573fcf39dfad3aed2f92074a35e6c02abe58b7678858d90fa6572ff4cb56df8b3e217c739cdbe3" > +SRC_URI[sha512sum] = > "32efe7071a363f547afc74e96774f711795edda1d2702823a347d0f9953e859b7d8c45b3e63e18ffb9e0d5ed5910be652d7d727c8676e81b6cb3aed0b13aec00" > + > +PR = "r5" > + > +S = "${WORKDIR}/pv-${PV}" > + > +EXCLUDE_FROM_WORLD = "1" > + > +inherit autotools > + > 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 @@ > +SUMMARY = "Pipe viewer test recipe for devtool upgrade test" > +LICENSE = "Artistic-2.0" > +LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02" > + > +SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.gz" > +UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml" > +RECIPE_NO_UPDATE_REASON = "This recipe is used to test devtool upgrade > feature" > + > +SRC_URI[sha1sum] = "395ce62f4f3e035b86c77038f04b96c5aa233595" > +SRC_URI[sha256sum] = > "9dd45391806b0ed215abee4c5ac1597d018c386fe9c1f5afd2f6bc3b07fd82c3" > +SRC_URI[sha384sum] = > "218c8d2d097aeba5310be759bc20573f18ffa0b11701eac6dd2e7e14ddf13c6e0e094ca7ca026eaa05ef92a056402e36" > +SRC_URI[sha512sum] = > "1cf9d7376fceefcd594d0a8b591afc8e11ce89f7210d10ad74438974ecebe9cc5d9ec4db9cc79e0566bfd2b0278c0cc263c07547803e7536432cd1ffd32d8a45" > + > +S = "${WORKDIR}/pv-${PV}" > + > +EXCLUDE_FROM_WORLD = "1" > + > +inherit autotools > + > diff --git a/meta/lib/oeqa/selftest/cases/devtool.py > b/meta/lib/oeqa/selftest/cases/devtool.py > index e01ab01869..4e65484d81 100644 > --- a/meta/lib/oeqa/selftest/cases/devtool.py > +++ b/meta/lib/oeqa/selftest/cases/devtool.py > @@ -1883,6 +1883,54 @@ class DevtoolUpgradeTests(DevtoolBase): > self.assertNotIn(recipe, result.output) > self.assertNotExists(os.path.join(self.workspacedir, 'recipes', > recipe), 'Recipe directory should not exist after resetting') > > + def test_devtool_upgrade_drop_md5sum(self): > + # Check preconditions > + self.assertTrue(not os.path.exists(self.workspacedir), 'This test > cannot be run with a workspace directory under the build directory') > + self.track_for_cleanup(self.workspacedir) > + self.add_command_to_tearDown('bitbake-layers remove-layer > */workspace') > + # For the moment, we are using a real recipe. > + recipe = 'devtool-upgrade-test3' > + version = '1.6.0' > + oldrecipefile = get_bb_var('FILE', recipe) > + tempdir = tempfile.mkdtemp(prefix='devtoolqa') > + self.track_for_cleanup(tempdir) > + # Check upgrade. Code does not check if new PV is older or newer > that current PV, so, it may be that > + # we are downgrading instead of upgrading. > + result = runCmd('devtool upgrade %s %s -V %s' % (recipe, tempdir, > version)) > + # Check new recipe file is present > + newrecipefile = os.path.join(self.workspacedir, 'recipes', recipe, > '%s_%s.bb' % (recipe, version)) > + self.assertExists(newrecipefile, 'Recipe file should exist after > upgrade') > + # Check recipe got changed as expected > + with open(oldrecipefile + '.upgraded', 'r') as f: > + desiredlines = f.readlines() > + with open(newrecipefile, 'r') as f: > + newlines = f.readlines() > + self.assertEqual(desiredlines, newlines) > + > + def test_devtool_upgrade_all_checksums(self): > + # Check preconditions > + self.assertTrue(not os.path.exists(self.workspacedir), 'This test > cannot be run with a workspace directory under the build directory') > + self.track_for_cleanup(self.workspacedir) > + self.add_command_to_tearDown('bitbake-layers remove-layer > */workspace') > + # For the moment, we are using a real recipe. > + recipe = 'devtool-upgrade-test4' > + version = '1.6.0' > + oldrecipefile = get_bb_var('FILE', recipe) > + tempdir = tempfile.mkdtemp(prefix='devtoolqa') > + self.track_for_cleanup(tempdir) > + # Check upgrade. Code does not check if new PV is older or newer > that current PV, so, it may be that > + # we are downgrading instead of upgrading. > + result = runCmd('devtool upgrade %s %s -V %s' % (recipe, tempdir, > version)) > + # Check new recipe file is present > + newrecipefile = os.path.join(self.workspacedir, 'recipes', recipe, > '%s_%s.bb' % (recipe, version)) > + self.assertExists(newrecipefile, 'Recipe file should exist after > upgrade') > + # Check recipe got changed as expected > + with open(oldrecipefile + '.upgraded', 'r') as f: > + desiredlines = f.readlines() > + with open(newrecipefile, 'r') as f: > + newlines = f.readlines() > + self.assertEqual(desiredlines, newlines) > + > def test_devtool_layer_plugins(self): > """Test that devtool can use plugins from other layers. > > 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 > __run('git submodule foreach \'git tag -f devtool-base-new\'') > (stdout, _) = __run('git submodule --quiet foreach \'echo > $sm_path\'') > paths += [os.path.join(srctree, p) for p in stdout.splitlines()] > - md5 = None > - sha256 = None > + checksums = {} > _, _, _, _, _, params = bb.fetch2.decodeurl(uri) > srcsubdir_rel = params.get('destsuffix', 'git') > if not srcbranch: > @@ -226,9 +225,6 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, > srcbranch, branch, kee > if ftmpdir and keep_temp: > logger.info('Fetch temp directory is %s' % ftmpdir) > > - md5 = checksums['md5sum'] > - sha256 = checksums['sha256sum'] > - > tmpsrctree = _get_srctree(tmpdir) > srctree = os.path.abspath(srctree) > srcsubdir_rel = os.path.relpath(tmpsrctree, tmpdir) > @@ -297,7 +293,7 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, > srcbranch, branch, kee > if tmpdir != tmpsrctree: > shutil.rmtree(tmpdir) > > - return (revs, md5, sha256, srcbranch, srcsubdir_rel) > + return (revs, checksums, srcbranch, srcsubdir_rel) > > def _add_license_diff_to_recipe(path, diff): > 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): > f.write("\n#\n\n".encode()) > f.write(orig_content) > > -def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, srcsubdir_old, > srcsubdir_new, workspace, tinfoil, rd, license_diff, new_licenses, srctree, > keep_failure): > +def _create_new_recipe(newpv, checksums, srcrev, srcbranch, srcsubdir_old, > srcsubdir_new, workspace, tinfoil, rd, license_diff, new_licenses, srctree, > keep_failure): > """Creates the new recipe under workspace""" > > bpn = rd.getVar('BPN') > @@ -390,30 +386,39 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, > srcbranch, srcsubdir_old, src > addnames.append(params['name']) > # Find what's been set in the original recipe > oldnames = [] > + oldsums = [] > noname = False > for varflag in rd.getVarFlags('SRC_URI'): > - if varflag.endswith(('.md5sum', '.sha256sum')): > - name = varflag.rsplit('.', 1)[0] > - if name not in oldnames: > - oldnames.append(name) > - elif varflag in ['md5sum', 'sha256sum']: > - noname = True > + for checksum in checksums: > + if varflag.endswith('.' + checksum): > + name = varflag.rsplit('.', 1)[0] > + if name not in oldnames: > + oldnames.append(name) > + oldsums.append(checksum) > + elif varflag == checksum: > + noname = True > + oldsums.append(checksum) > # Even if SRC_URI has named entries it doesn't have to actually use the > name > if noname and addnames and addnames[0] not in oldnames: > addnames = [] > # Drop any old names (the name actually might include ${PV}) > for name in oldnames: > if name not in newnames: > - newvalues['SRC_URI[%s.md5sum]' % name] = None > - newvalues['SRC_URI[%s.sha256sum]' % name] = None > + for checksum in oldsums: > + newvalues['SRC_URI[%s.%s]' % (name, checksum)] = None > > - if sha256: > - if addnames: > - nameprefix = '%s.' % addnames[0] > - else: > - nameprefix = '' > + nameprefix = '%s.' % addnames[0] if addnames else '' > + > + # md5sum is deprecated, remove any traces of it. If it was the only old > + # checksum, then replace it with the default checksums. > + if 'md5sum' in oldsums: > newvalues['SRC_URI[%smd5sum]' % nameprefix] = None > - newvalues['SRC_URI[%ssha256sum]' % nameprefix] = sha256 > + oldsums.remove('md5sum') > + if not oldsums: > + oldsums = ["%ssum" % s for s in bb.fetch2.SHOWN_CHECKSUM_LIST] > + > + for checksum in oldsums: > + newvalues['SRC_URI[%s%s]' % (nameprefix, checksum)] = > checksums[checksum] > > if srcsubdir_new != srcsubdir_old: > 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): > rev1, srcsubdir1 = standard._extract_source(srctree, False, > 'devtool-orig', False, config, basepath, workspace, args.fixed_setup, rd, > tinfoil, no_overrides=args.no_overrides) > old_licenses = _extract_licenses(srctree_s, > (rd.getVar('LIC_FILES_CHKSUM') or "")) > logger.info('Extracting upgraded version source...') > - rev2, md5, sha256, srcbranch, srcsubdir2 = > _extract_new_source(args.version, srctree, args.no_patch, > + rev2, checksums, srcbranch, srcsubdir2 = > _extract_new_source(args.version, srctree, args.no_patch, > args.srcrev, > args.srcbranch, args.branch, args.keep_temp, > tinfoil, rd) > new_licenses = _extract_licenses(srctree_s, > (rd.getVar('LIC_FILES_CHKSUM') or "")) > license_diff = _generate_license_diff(old_licenses, new_licenses) > - 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) > + 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) > except (bb.process.CmdError, DevtoolError) as e: > recipedir = os.path.join(config.workspace_path, 'recipes', > rd.getVar('BPN')) > _upgrade_error(e, recipedir, srctree, args.keep_failure) > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#191922): https://lists.openembedded.org/g/openembedded-core/message/191922 Mute This Topic: https://lists.openembedded.org/mt/103019944/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-