diff mbox series

[1/2] insane.bbclass: check revision for every git URI

Message ID 20251113181157.410053-1-corentin.guillevic@smile.fr
State New
Headers show
Series [1/2] insane.bbclass: check revision for every git URI | expand

Commit Message

Corentin Guillevic Nov. 13, 2025, 6:11 p.m. UTC
Every git URI into SRC_URI variable should have a revision. However, if
the revision is missing (SRCREV), BitBake will perform a query on the
remote repository every time it parses a recipe.

This check will raise an error if a git URI is not provided alongside a revision.

Signed-off-by: Corentin Guillevic <corentin.guillevic@smile.fr>
---
 meta/classes-global/insane.bbclass | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

Comments

Peter Marko Nov. 13, 2025, 7:12 p.m. UTC | #1
It is still possible to specify revision by adding ";rev=<hash>" to SRC_URI.
We should not error-out on valid configurations.

Peter

> -----Original Message-----
> From: openembedded-core@lists.openembedded.org <openembedded-
> core@lists.openembedded.org> On Behalf Of Corentin Guillevic via
> lists.openembedded.org
> Sent: Thursday, November 13, 2025 19:12
> To: openembedded-core@lists.openembedded.org
> Cc: Corentin Guillevic <corentin.guillevic@smile.fr>
> Subject: [OE-core] [PATCH 1/2] insane.bbclass: check revision for every git URI
> 
> Every git URI into SRC_URI variable should have a revision. However, if
> the revision is missing (SRCREV), BitBake will perform a query on the
> remote repository every time it parses a recipe.
> 
> This check will raise an error if a git URI is not provided alongside a revision.
> 
> Signed-off-by: Corentin Guillevic <corentin.guillevic@smile.fr>
> ---
>  meta/classes-global/insane.bbclass | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/meta/classes-global/insane.bbclass b/meta/classes-
> global/insane.bbclass
> index fed8163c3e..f6e9ed6347 100644
> --- a/meta/classes-global/insane.bbclass
> +++ b/meta/classes-global/insane.bbclass
> @@ -1495,7 +1495,26 @@ python do_recipe_qa() {
>                  error_msg = "%s: invalid PACKAGECONFIG(s): %s" % (pn, "
> ".join(sorted(invalid_pkgconfigs)))
>                  oe.qa.handle_error("invalid-packageconfig", error_msg, d)
> 
> +    def test_git_missing_srcrev(pn, d):
> +        for uri in d.getVar('SRC_URI').split():
> +            if not uri.startswith('git://'):
> +                continue
> +
> +            # Get parameters for the current URI
> +            params = bb.fetch2.decodeurl(uri)[5]
> +            name = params.get('name', '')
> +
> +            # git URI has a "name" parameter
> +            if name:
> +                rev = d.getVar('SRCREV_' + name)
> +                if not rev:
> +                    oe.qa.handle_error("missing-srcrev", "%s: no revision (%s) defined
> for URI %s" % (pn, 'SRCREV_' + name, uri), d)
> +            else:
> +                if d.getVar('SRCREV') == "INVALID":
> +                    oe.qa.handle_error("missing-srcrev", "%s: no revision (SRCREV)
> defined for URI %s" % (pn, uri), d)
> +
>      pn = d.getVar('PN')
> +    test_git_missing_srcrev(pn, d)
>      test_naming(pn, d)
>      test_missing_metadata(pn, d)
>      test_missing_maintainer(pn, d)
> --
> 2.49.0
diff mbox series

Patch

diff --git a/meta/classes-global/insane.bbclass b/meta/classes-global/insane.bbclass
index fed8163c3e..f6e9ed6347 100644
--- a/meta/classes-global/insane.bbclass
+++ b/meta/classes-global/insane.bbclass
@@ -1495,7 +1495,26 @@  python do_recipe_qa() {
                 error_msg = "%s: invalid PACKAGECONFIG(s): %s" % (pn, " ".join(sorted(invalid_pkgconfigs)))
                 oe.qa.handle_error("invalid-packageconfig", error_msg, d)
 
+    def test_git_missing_srcrev(pn, d):
+        for uri in d.getVar('SRC_URI').split():
+            if not uri.startswith('git://'):
+                continue
+
+            # Get parameters for the current URI
+            params = bb.fetch2.decodeurl(uri)[5]
+            name = params.get('name', '')
+
+            # git URI has a "name" parameter
+            if name:
+                rev = d.getVar('SRCREV_' + name)
+                if not rev:
+                    oe.qa.handle_error("missing-srcrev", "%s: no revision (%s) defined for URI %s" % (pn, 'SRCREV_' + name, uri), d)
+            else:
+                if d.getVar('SRCREV') == "INVALID":
+                    oe.qa.handle_error("missing-srcrev", "%s: no revision (SRCREV) defined for URI %s" % (pn, uri), d)
+
     pn = d.getVar('PN')
+    test_git_missing_srcrev(pn, d)
     test_naming(pn, d)
     test_missing_metadata(pn, d)
     test_missing_maintainer(pn, d)