So far, reading the "extended" data of a package stored within "pkgdata" is not supported. Extend oe-pkgdata-util to support this use case.
For symmetry to `read-value` and `package-info` it expects the runtime package name as its package name. Passing in multiple packages is not supported as this would require further processing by clients using this command before the returned JSON payload can be parsed. Signed-off-by: Philip Lorenz <[email protected]> --- meta/lib/oeqa/selftest/cases/pkgdata.py | 16 +++++++++++ scripts/oe-pkgdata-util | 36 +++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/meta/lib/oeqa/selftest/cases/pkgdata.py b/meta/lib/oeqa/selftest/cases/pkgdata.py index d786c33018d..6c5b7a84f47 100644 --- a/meta/lib/oeqa/selftest/cases/pkgdata.py +++ b/meta/lib/oeqa/selftest/cases/pkgdata.py @@ -4,7 +4,9 @@ # SPDX-License-Identifier: MIT # +import json import os +import pathlib import tempfile import fnmatch @@ -225,3 +227,17 @@ class OePkgdataUtilTests(OESelftestTestCase): self.assertEqual(result.status, 2, "Status different than 2. output: %s" % result.output) currpos = result.output.find('usage: oe-pkgdata-util') self.assertTrue(currpos != -1, msg = "Test is Failed. Help is not Displayed in %s" % result.output) + + def test_read_extended(self): + result = runCmd('oe-pkgdata-util read-extended libz-dbg') + extended_data = json.loads(result.output) + + self.assertIn('files_info', extended_data, "Could not find key 'files_info' in '%s'" % extended_data) + + files_info = extended_data['files_info'] + libz_file_name = next((key for key in files_info.keys() \ + if pathlib.Path(key).name.startswith('libz')), None) + self.assertIsNotNone(libz_file_name, "Couldn't find libz in '%s'" % files_info) + + file_info = files_info[libz_file_name] + self.assertIn('size', file_info, "Couldn't find key 'size' in '%s'" % file_info) diff --git a/scripts/oe-pkgdata-util b/scripts/oe-pkgdata-util index 44ae40549ae..50be8e0bb60 100755 --- a/scripts/oe-pkgdata-util +++ b/scripts/oe-pkgdata-util @@ -16,6 +16,8 @@ import fnmatch import re import argparse import logging +import pathlib +import subprocess from collections import defaultdict, OrderedDict scripts_path = os.path.dirname(os.path.realpath(__file__)) @@ -206,6 +208,34 @@ def read_value(args): else: logger.debug("revlink %s does not exist", revlink) +def read_extended(args): + if not args.pkg: + logger.error("No package specified") + sys.exit(1) + + logger.debug("read-extended('%s', '%s')" % (args.pkgdata_dir, args.pkg)) + + pkgdata_dir = pathlib.Path(args.pkgdata_dir) + pkg_name = args.pkg.split('_')[0] + + # Map runtime package name to recipe-world + runtimepkgpath = pkgdata_dir / "runtime-reverse" / pkg_name + recipe_pkg_name = runtimepkgpath.readlink().name + + extendedpath = pkgdata_dir / "extended" / ("%s.json.zstd" % recipe_pkg_name) + + if not extendedpath.exists(): + logger.error("Extended package information '%s' does not exist", extendedpath) + sys.exit(1) + + try: + info = subprocess.check_output(["zstdcat", extendedpath]).decode("utf-8") + print(info) + except subprocess.CalledProcessError as exc: + logger.error("Failed to decompress '%s': %s", extendedpath, exc, exc_info=exc) + sys.exit(1) + + def lookup_pkglist(pkgs, pkgdata_dir, reverse): if reverse: mappings = OrderedDict() @@ -586,6 +616,12 @@ def main(): parser_read_value.add_argument('-u', '--unescape', help='Expand escapes such as \\n', action='store_true') parser_read_value.set_defaults(func=read_value) + parser_read_extended = subparsers.add_parser('read-extended', + help='Read extended pkgdata for a package', + description='Outputs the extended data content of a package') + parser_read_extended.add_argument('pkg', help='Package name to look up') + parser_read_extended.set_defaults(func=read_extended) + parser_glob = subparsers.add_parser('glob', help='Expand package name glob expression', description='Expands one or more glob expressions over the packages listed in pkglistfile') -- 2.44.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#196639): https://lists.openembedded.org/g/openembedded-core/message/196639 Mute This Topic: https://lists.openembedded.org/mt/104747699/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
