@@ -240,6 +240,36 @@ def check_upstream_status(fullpath):
else:
return "Missing Upstream-Status in patch\n%s\nPlease add according to %s ." % (fullpath, guidelines)
+def check_uri_srcrev(pn, uri, d):
+ """
+ Check that a single SCM URI has a valid SRCREV set.
+
+ Returns the resolved revision string if valid (including '${AUTOREV}').
+ Returns '' for non-SCM URIs or URIs with inline rev= parameter (skip).
+ Returns None if SRCREV is missing or INVALID.
+ """
+ import bb.fetch2
+ try:
+ (scheme, _, _, _, _, params) = bb.fetch2.decodeurl(uri)
+ except Exception:
+ return ''
+ if scheme not in ('git', 'gitsm', 'hg', 'svn'):
+ return ''
+ if params.get('rev', ''):
+ return ''
+ name = params.get('name', 'default')
+ candidates = [
+ f'SRCREV_{name}:pn-{pn}',
+ f'SRCREV_{name}',
+ f'SRCREV:pn-{pn}',
+ 'SRCREV',
+ ]
+ for candidate in candidates:
+ rev = d.getVar(candidate, False)
+ if rev and rev != 'INVALID':
+ return rev
+ return None
+
if __name__ == "__main__":
import sys
Add a shared helper function check_uri_srcrev() that checks whether a single SCM URI has a valid SRCREV set in the datastore. The function uses unexpanded getVar() calls (False flag) to safely inspect SRCREV without triggering AUTOREV expansion or live network fetches. It mirrors BitBake's internal SRCREV resolution fallback chain exactly: SRCREV_<name>:pn-<recipe>, SRCREV_<name>, SRCREV:pn-<recipe>, SRCREV Returns: - The revision string if a valid SRCREV is found - '' for non-SCM URIs or URIs with inline rev= parameter (skip) - None if SRCREV is missing or INVALID This shared helper is used by base.bbclass, insane.bbclass and yocto-check-layer.bbclass to avoid duplicating the same logic. Reported-by: Yoann Congal <yoann.congal@smile.fr> Fixes: https://bugzilla.yoctoproject.org/show_bug.cgi?id=16051 AI-Generated: Developed with assistance from Anthropic Claude Signed-off-by: Sai Sneha <saisneha196@gmail.com> --- Changes in v4: - New patch: factored common SRCREV checking logic into shared helper - Eliminates code duplication across base.bbclass, insane.bbclass and yocto-check-layer.bbclass - Uses for-else pattern, f-strings, simplified name lookup - Adds docstring explaining return values Changes in v3: - Added AI-Generated disclosure and Reported-by tag Changes in v2: - Initial public submission meta/lib/oe/qa.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)