On Tue, 2026-06-02 at 11:59 +0530, Sai Sneha via lists.openembedded.org wrote: > 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= or tag= 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 <[email protected]> > Fixes: https://bugzilla.yoctoproject.org/show_bug.cgi?id=16051 > AI-Generated: Developed with assistance from Anthropic Claude > Signed-off-by: Sai Sneha <[email protected]> > --- > > Changes in v5: > - Add tag= to skip condition alongside rev= to fix selftest breakage > (test_git_unpack_nonetwork) reported by Mathieu Dubois-Briand > - Update docstring to mention tag= parameter > > 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(+) > > diff --git a/meta/lib/oe/qa.py b/meta/lib/oe/qa.py > index cd36cb5070..0987aaf2c4 100644 > --- a/meta/lib/oe/qa.py > +++ b/meta/lib/oe/qa.py > @@ -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 ''
Each fetcher class has a supports_srcrev() method we can call instead of
trying to hard-code a list here.
> + if params.get('rev', '') or params.get('tag', ''):
> + 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 there is no 'name' param, this code will look for SRCREV_default
before SRCREV, which is not correct. Off the top of my head, I think
this should be looking at `SRCREV_${name}` if name is set, else
`SRCREV`. You should check how the existing fetcher code determines the
SRCREV value to use.
Please also drop overrides handling as I mentioned in the other email I
just sent.
--
Paul Barker
signature.asc
Description: This is a digitally signed message part
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#238045): https://lists.openembedded.org/g/openembedded-core/message/238045 Mute This Topic: https://lists.openembedded.org/mt/119607372/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
