[oe-commits] [openembedded-core] 01/11: lib/oe/recipeutils: Add a new function to mimic do_checkpkg

git at git.openembedded.org git at git.openembedded.org
Sat Dec 15 11:50:04 UTC 2018


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master
in repository openembedded-core.

commit 92e33277b1b7892bae9cc0801ab379bd1c57c0f0
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Fri Dec 14 17:45:27 2018 +0000

    lib/oe/recipeutils: Add a new function to mimic do_checkpkg
    
    The code in distrodata.bbclass related to the do_checkpkg task is rather
    dated, has holes in it (ignoring some recipes) and has horrible locking
    and csv related issues.
    
    We should use modern APIs such as tinfoil to make the calls we need directly
    against bitbake, cutting out the middleman and clarifing the code.
    
    This change imports the bits of distrodata.bbclass that are needed by the
    automated upgrade helper (AUH) into a standalone function which uses the
    tinfoil API. This can then be used by AUH and by the tests in
    oeqa/selftest/distrodata as well as by any other standalone script that needs
    this functionality. Its likely it can be further improved from here but this is a
    good start and appears to function as before, with slightly wider recipe
    coverage as some things skipped by distrodata are not skipped here (images,
    pieces of gcc, nativesdk only recipes).
    
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 meta/lib/oe/recipeutils.py | 53 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 52 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oe/recipeutils.py b/meta/lib/oe/recipeutils.py
index 9c99164..39d3de4 100644
--- a/meta/lib/oe/recipeutils.py
+++ b/meta/lib/oe/recipeutils.py
@@ -16,8 +16,10 @@ import shutil
 import re
 import fnmatch
 import glob
-from collections import OrderedDict, defaultdict
+import bb.tinfoil
 
+from collections import OrderedDict, defaultdict
+from bb.utils import vercmp_string
 
 # Help us to find places to insert values
 recipe_progression = ['SUMMARY', 'DESCRIPTION', 'HOMEPAGE', 'BUGTRACKER', 'SECTION', 'LICENSE', 'LICENSE_FLAGS', 'LIC_FILES_CHKSUM', 'PROVIDES', 'DEPENDS', 'PR', 'PV', 'SRCREV', 'SRCPV', 'SRC_URI', 'S', 'do_fetch()', 'do_unpack()', 'do_patch()', 'EXTRA_OECONF', 'EXTRA_OECMAKE', 'EXTRA_OESCONS', 'do_configure()', 'EXTRA_OEMAKE', 'do_compile()', 'do_install()', 'do_populate_sysroot()', 'INITSCRIPT', 'USERADD', 'GROUPADD', 'PACKAGES', 'FILES', 'RDEPENDS', 'RRECOMMENDS', 'RSUGGESTS', 'RPROVI [...]
@@ -1017,3 +1019,52 @@ def get_recipe_upstream_version(rd):
         ru['datetime'] = datetime.now()
 
     return ru
+
+def get_recipe_upgrade_status(recipes=None):
+    pkgs_list = []
+    with bb.tinfoil.Tinfoil() as tinfoil:
+        tinfoil.prepare(config_only=False)
+
+        if not recipes:
+            recipes = tinfoil.all_recipe_files(variants=False)
+
+        for fn in recipes:
+            try:
+                if fn.startswith("/"):
+                    data = tinfoil.parse_recipe_file(fn)
+                else:
+                    data = tinfoil.parse_recipe(fn)
+            except bb.providers.NoProvider:
+                bb.note(" No provider for %s" % fn)
+                continue
+
+            unreliable = data.getVar('UPSTREAM_CHECK_UNRELIABLE')
+            if unreliable == "1":
+                bb.note(" Skip package %s as upstream check unreliable" % pn)
+                continue
+
+            uv = get_recipe_upstream_version(data)
+
+            pn = data.getVar('PN')
+            cur_ver = uv['current_version']
+
+            upstream_version_unknown = data.getVar('UPSTREAM_VERSION_UNKNOWN')
+            if not uv['version']:
+                status = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN"
+            else:
+                cmp = vercmp_string(uv['current_version'], uv['version'])
+                if cmp == -1:
+                    status = "UPDATE" if not upstream_version_unknown else "KNOWN_BROKEN"
+                elif cmp == 0:
+                    status = "MATCH" if not upstream_version_unknown else "KNOWN_BROKEN"
+                else:
+                    status = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN"
+
+            next_ver = uv['version'] if uv['version'] else "N/A"
+            revision = uv['revision'] if uv['revision'] else "N/A"
+            maintainer = data.getVar('RECIPE_MAINTAINER')
+            no_upgrade_reason = data.getVar('RECIPE_NO_UPDATE_REASON')
+
+            pkgs_list.append((pn, status, cur_ver, next_ver, maintainer, revision, no_upgrade_reason))
+
+    return pkgs_list

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list