|
@@ -27,7 +27,7 @@ import fnmatch
|
|
|
import re
|
|
|
import argparse
|
|
|
import logging
|
|
|
-from collections import defaultdict
|
|
|
+from collections import defaultdict, OrderedDict
|
|
|
|
|
|
scripts_path = os.path.dirname(os.path.realpath(__file__))
|
|
|
lib_path = scripts_path + '/lib'
|
|
@@ -184,30 +184,47 @@ def read_value(args):
|
|
|
else:
|
|
|
print(readvar(revlink, qvar))
|
|
|
|
|
|
+def lookup_pkglist(pkgs, pkgdata_dir, reverse):
|
|
|
+ if reverse:
|
|
|
+ mappings = OrderedDict()
|
|
|
+ for pkg in pkgs:
|
|
|
+ revlink = os.path.join(pkgdata_dir, "runtime-reverse", pkg)
|
|
|
+ logger.debug(revlink)
|
|
|
+ if os.path.exists(revlink):
|
|
|
+ mappings[pkg] = os.path.basename(os.readlink(revlink))
|
|
|
+ else:
|
|
|
+ mappings = defaultdict(list)
|
|
|
+ for pkg in pkgs:
|
|
|
+ pkgfile = os.path.join(pkgdata_dir, 'runtime', pkg)
|
|
|
+ if os.path.exists(pkgfile):
|
|
|
+ with open(pkgfile, 'r') as f:
|
|
|
+ for line in f:
|
|
|
+ fields = line.rstrip().split(': ')
|
|
|
+ if fields[0] == 'PKG_%s' % pkg:
|
|
|
+ mappings[pkg].append(fields[1])
|
|
|
+ break
|
|
|
+ return mappings
|
|
|
+
|
|
|
def lookup_pkg(args):
|
|
|
# Handle both multiple arguments and multiple values within an arg (old syntax)
|
|
|
pkgs = []
|
|
|
- for pkgitem in args.recipepkg:
|
|
|
+ for pkgitem in args.pkg:
|
|
|
pkgs.extend(pkgitem.split())
|
|
|
|
|
|
- mappings = defaultdict(list)
|
|
|
- for pkg in pkgs:
|
|
|
- pkgfile = os.path.join(args.pkgdata_dir, 'runtime', pkg)
|
|
|
- if os.path.exists(pkgfile):
|
|
|
- with open(pkgfile, 'r') as f:
|
|
|
- for line in f:
|
|
|
- fields = line.rstrip().split(': ')
|
|
|
- if fields[0] == 'PKG_%s' % pkg:
|
|
|
- mappings[pkg].append(fields[1])
|
|
|
- break
|
|
|
+ mappings = lookup_pkglist(pkgs, args.pkgdata_dir, args.reverse)
|
|
|
+
|
|
|
if len(mappings) < len(pkgs):
|
|
|
missing = list(set(pkgs) - set(mappings.keys()))
|
|
|
logger.error("The following packages could not be found: %s" % ', '.join(missing))
|
|
|
sys.exit(1)
|
|
|
|
|
|
- items = []
|
|
|
- for pkg in pkgs:
|
|
|
- items.extend(mappings.get(pkg, []))
|
|
|
+ if args.reverse:
|
|
|
+ items = mappings.values()
|
|
|
+ else:
|
|
|
+ items = []
|
|
|
+ for pkg in pkgs:
|
|
|
+ items.extend(mappings.get(pkg, []))
|
|
|
+
|
|
|
print('\n'.join(items))
|
|
|
|
|
|
def lookup_recipe(args):
|
|
@@ -265,9 +282,10 @@ def main():
|
|
|
subparsers = parser.add_subparsers(title='subcommands', metavar='<subcommand>')
|
|
|
|
|
|
parser_lookup_pkg = subparsers.add_parser('lookup-pkg',
|
|
|
- help='Translate recipe-space package names to runtime package names',
|
|
|
- description='Looks up the specified recipe-space package name(s) to see what the final runtime package name is (e.g. glibc becomes libc6)')
|
|
|
- parser_lookup_pkg.add_argument('recipepkg', nargs='+', help='Recipe-space package name to look up')
|
|
|
+ help='Translate between recipe-space package names and runtime package names',
|
|
|
+ description='Looks up the specified recipe-space package name(s) to see what the final runtime package name is (e.g. glibc becomes libc6), or with -r/--reverse looks up the other way.')
|
|
|
+ parser_lookup_pkg.add_argument('pkg', nargs='+', help='Package name to look up')
|
|
|
+ parser_lookup_pkg.add_argument('-r', '--reverse', help='Switch to looking up recipe-space package names from runtime package names', action='store_true')
|
|
|
parser_lookup_pkg.set_defaults(func=lookup_pkg)
|
|
|
|
|
|
parser_lookup_recipe = subparsers.add_parser('lookup-recipe',
|