|
@@ -274,6 +274,61 @@ def lookup_recipe(args):
|
|
|
items.extend(mappings.get(pkg, []))
|
|
|
print('\n'.join(items))
|
|
|
|
|
|
+def package_info(args):
|
|
|
+ # Handle both multiple arguments and multiple values within an arg (old syntax)
|
|
|
+ packages = []
|
|
|
+ if args.file:
|
|
|
+ with open(args.file, 'r') as f:
|
|
|
+ for line in f:
|
|
|
+ splitline = line.split()
|
|
|
+ if splitline:
|
|
|
+ packages.append(splitline[0])
|
|
|
+ else:
|
|
|
+ for pkgitem in args.pkg:
|
|
|
+ packages.extend(pkgitem.split())
|
|
|
+ if not packages:
|
|
|
+ logger.error("No packages specified")
|
|
|
+ sys.exit(1)
|
|
|
+
|
|
|
+ mappings = defaultdict(lambda: defaultdict(str))
|
|
|
+ for pkg in packages:
|
|
|
+ pkgfile = os.path.join(args.pkgdata_dir, 'runtime-reverse', pkg)
|
|
|
+ if os.path.exists(pkgfile):
|
|
|
+ with open(pkgfile, 'r') as f:
|
|
|
+ for line in f:
|
|
|
+ fields = line.rstrip().split(': ')
|
|
|
+ if fields[0].endswith("_" + pkg):
|
|
|
+ k = fields[0][:len(fields[0]) - len(pkg) - 1]
|
|
|
+ else:
|
|
|
+ k = fields[0]
|
|
|
+ v = fields[1] if len(fields) == 2 else ""
|
|
|
+ mappings[pkg][k] = v
|
|
|
+
|
|
|
+ if len(mappings) < len(packages):
|
|
|
+ missing = list(set(packages) - set(mappings.keys()))
|
|
|
+ logger.error("The following packages could not be found: %s" %
|
|
|
+ ', '.join(missing))
|
|
|
+ sys.exit(1)
|
|
|
+
|
|
|
+ items = []
|
|
|
+ for pkg in packages:
|
|
|
+ pkg_version = mappings[pkg]['PKGV']
|
|
|
+ if mappings[pkg]['PKGE']:
|
|
|
+ pkg_version = mappings[pkg]['PKGE'] + ":" + pkg_version
|
|
|
+ if mappings[pkg]['PKGR']:
|
|
|
+ pkg_version = pkg_version + "-" + mappings[pkg]['PKGR']
|
|
|
+ recipe = mappings[pkg]['PN']
|
|
|
+ recipe_version = mappings[pkg]['PV']
|
|
|
+ if mappings[pkg]['PE']:
|
|
|
+ recipe_version = mappings[pkg]['PE'] + ":" + recipe_version
|
|
|
+ if mappings[pkg]['PR']:
|
|
|
+ recipe_version = recipe_version + "-" + mappings[pkg]['PR']
|
|
|
+ pkg_size = mappings[pkg]['PKGSIZE']
|
|
|
+
|
|
|
+ items.append("%s %s %s %s %s" %
|
|
|
+ (pkg, pkg_version, recipe, recipe_version, pkg_size))
|
|
|
+ print('\n'.join(items))
|
|
|
+
|
|
|
def get_recipe_pkgs(pkgdata_dir, recipe, unpackaged):
|
|
|
recipedatafile = os.path.join(pkgdata_dir, recipe)
|
|
|
if not os.path.exists(recipedatafile):
|
|
@@ -470,6 +525,13 @@ def main():
|
|
|
parser_lookup_recipe.add_argument('pkg', nargs='+', help='Runtime package name to look up')
|
|
|
parser_lookup_recipe.set_defaults(func=lookup_recipe)
|
|
|
|
|
|
+ parser_package_info = subparsers.add_parser('package-info',
|
|
|
+ help='Shows version, recipe and size information for one or more packages',
|
|
|
+ description='Looks up the specified runtime package(s) and display information')
|
|
|
+ parser_package_info.add_argument('pkg', nargs='*', help='Runtime package name to look up')
|
|
|
+ parser_package_info.add_argument('-f', '--file', help='Read package names from the specified file (one per line, first field only)')
|
|
|
+ parser_package_info.set_defaults(func=package_info)
|
|
|
+
|
|
|
parser_find_path = subparsers.add_parser('find-path',
|
|
|
help='Find package providing a target path',
|
|
|
description='Finds the recipe-space package providing the specified target path')
|