[OE-core] [PATCH 2/4] scripts/oe-pkgdata-util: add ability to list all produced packages from a recipe

Hongxu Jia hongxu.jia at windriver.com
Wed Jan 7 07:06:50 UTC 2015


Add a "list-packages" command to list all produced packages by a
particular recipe.

[YOCTO #5264]

Signed-off-by: Hongxu Jia <hongxu.jia at windriver.com>
---
 scripts/oe-pkgdata-util | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/scripts/oe-pkgdata-util b/scripts/oe-pkgdata-util
index e43f773..984f66e 100755
--- a/scripts/oe-pkgdata-util
+++ b/scripts/oe-pkgdata-util
@@ -28,6 +28,7 @@ import re
 import optparse
 from collections import defaultdict
 import codecs
+import errno
 
 def glob(args, usage, debug=False):
     if len(args) < 3:
@@ -308,6 +309,46 @@ def collect_rprovides(pkgdata_dir):
 
     return rprovides_dict
 
+def list_packages(args, usage, debug=False):
+    if len(args) < 2:
+        usage()
+        sys.exit(1)
+
+    pkgdata_dir = args[0]
+    if not os.path.exists(pkgdata_dir):
+        print('ERROR: Unable to find pkgdata directory %s' % pkgdata_dir)
+        sys.exit(1)
+
+    if len(args[1].split()) != 1:
+        print('ERROR: Only one recipe name is acceptable')
+        sys.exit(1)
+
+    recipe = args[1]
+    packages = ""
+    try:
+        with open(os.path.join(pkgdata_dir, recipe)) as f:
+            for line in f.readlines():
+                if line.startswith('PACKAGES: '):
+                    packages = line.split(': ', 1)[1].split()
+                    break
+    except IOError as e:
+        if e.errno == errno.ENOENT:
+            print('ERROR: The recipe %s does not exist' % recipe)
+            sys.exit(1)
+        else:
+            raise
+
+    # Filter out packages that not generated
+    for pkg in packages[:]:
+        flag_packaged = "%s/runtime/%s.packaged" % (pkgdata_dir, pkg)
+        if not os.access(flag_packaged, os.R_OK):
+            if debug:
+                print("%s not produced by %s" % (pkg, recipe))
+            packages.remove(pkg)
+
+    print '\n'.join(packages)
+
+
 def find_path(args, usage, debug=False):
     if len(args) < 2:
         usage()
@@ -354,7 +395,9 @@ Available commands:
         find the package providing the specified path (wildcards * ? allowed)
     read-value <pkgdatadir> <value-name> "<pkgs>"
         read the named value from the pkgdata files for the specified
-        packages''')
+        packages
+    list-packages <pkgdatadir> "<recipe>"
+        list all packages produced by the particular recipe''')
 
     parser.add_option("-d", "--debug",
             help = "Enable debug output",
@@ -377,6 +420,8 @@ Available commands:
         find_path(args[1:], parser.print_help, options.debug)
     elif args[0] == "read-value":
         read_value(args[1:], parser.print_help, options.debug)
+    elif args[0] == "list-packages":
+        list_packages(args[1:], parser.print_help, options.debug)
     else:
         parser.print_help()
         sys.exit(1)
-- 
1.9.1




More information about the Openembedded-core mailing list