summaryrefslogtreecommitdiffstats
path: root/scripts/oe-pkgdata-util
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/oe-pkgdata-util')
-rwxr-xr-xscripts/oe-pkgdata-util62
1 files changed, 62 insertions, 0 deletions
diff --git a/scripts/oe-pkgdata-util b/scripts/oe-pkgdata-util
index 9b9098215c..e4d262d7b7 100755
--- a/scripts/oe-pkgdata-util
+++ b/scripts/oe-pkgdata-util
@@ -274,6 +274,61 @@ def lookup_recipe(args):
274 items.extend(mappings.get(pkg, [])) 274 items.extend(mappings.get(pkg, []))
275 print('\n'.join(items)) 275 print('\n'.join(items))
276 276
277def package_info(args):
278 # Handle both multiple arguments and multiple values within an arg (old syntax)
279 packages = []
280 if args.file:
281 with open(args.file, 'r') as f:
282 for line in f:
283 splitline = line.split()
284 if splitline:
285 packages.append(splitline[0])
286 else:
287 for pkgitem in args.pkg:
288 packages.extend(pkgitem.split())
289 if not packages:
290 logger.error("No packages specified")
291 sys.exit(1)
292
293 mappings = defaultdict(lambda: defaultdict(str))
294 for pkg in packages:
295 pkgfile = os.path.join(args.pkgdata_dir, 'runtime-reverse', pkg)
296 if os.path.exists(pkgfile):
297 with open(pkgfile, 'r') as f:
298 for line in f:
299 fields = line.rstrip().split(': ')
300 if fields[0].endswith("_" + pkg):
301 k = fields[0][:len(fields[0]) - len(pkg) - 1]
302 else:
303 k = fields[0]
304 v = fields[1] if len(fields) == 2 else ""
305 mappings[pkg][k] = v
306
307 if len(mappings) < len(packages):
308 missing = list(set(packages) - set(mappings.keys()))
309 logger.error("The following packages could not be found: %s" %
310 ', '.join(missing))
311 sys.exit(1)
312
313 items = []
314 for pkg in packages:
315 pkg_version = mappings[pkg]['PKGV']
316 if mappings[pkg]['PKGE']:
317 pkg_version = mappings[pkg]['PKGE'] + ":" + pkg_version
318 if mappings[pkg]['PKGR']:
319 pkg_version = pkg_version + "-" + mappings[pkg]['PKGR']
320 recipe = mappings[pkg]['PN']
321 recipe_version = mappings[pkg]['PV']
322 if mappings[pkg]['PE']:
323 recipe_version = mappings[pkg]['PE'] + ":" + recipe_version
324 if mappings[pkg]['PR']:
325 recipe_version = recipe_version + "-" + mappings[pkg]['PR']
326 pkg_size = mappings[pkg]['PKGSIZE']
327
328 items.append("%s %s %s %s %s" %
329 (pkg, pkg_version, recipe, recipe_version, pkg_size))
330 print('\n'.join(items))
331
277def get_recipe_pkgs(pkgdata_dir, recipe, unpackaged): 332def get_recipe_pkgs(pkgdata_dir, recipe, unpackaged):
278 recipedatafile = os.path.join(pkgdata_dir, recipe) 333 recipedatafile = os.path.join(pkgdata_dir, recipe)
279 if not os.path.exists(recipedatafile): 334 if not os.path.exists(recipedatafile):
@@ -470,6 +525,13 @@ def main():
470 parser_lookup_recipe.add_argument('pkg', nargs='+', help='Runtime package name to look up') 525 parser_lookup_recipe.add_argument('pkg', nargs='+', help='Runtime package name to look up')
471 parser_lookup_recipe.set_defaults(func=lookup_recipe) 526 parser_lookup_recipe.set_defaults(func=lookup_recipe)
472 527
528 parser_package_info = subparsers.add_parser('package-info',
529 help='Shows version, recipe and size information for one or more packages',
530 description='Looks up the specified runtime package(s) and display information')
531 parser_package_info.add_argument('pkg', nargs='*', help='Runtime package name to look up')
532 parser_package_info.add_argument('-f', '--file', help='Read package names from the specified file (one per line, first field only)')
533 parser_package_info.set_defaults(func=package_info)
534
473 parser_find_path = subparsers.add_parser('find-path', 535 parser_find_path = subparsers.add_parser('find-path',
474 help='Find package providing a target path', 536 help='Find package providing a target path',
475 description='Finds the recipe-space package providing the specified target path') 537 description='Finds the recipe-space package providing the specified target path')