Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 0/4] Add missing tag parameter in git SRC_URI
@ 2026-07-21 14:48 daniel.turull
  2026-07-21 14:48 ` [PATCH 1/4] scripts/contrib: add helper to report and fix missing SRC_URI ;tag= daniel.turull
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: daniel.turull @ 2026-07-21 14:48 UTC (permalink / raw)
  To: openembedded-core; +Cc: Daniel Turull, Alexander Kanavin

From: Daniel Turull <daniel.turull@ericsson.com>

Create a script to systematically check and add tag=
into SRC_URI to track releases together with SRC_URI

And update all recipes with missing tag that I can verify with the default build
with -c fetch and do_unpack

For reference, this provives:
1. Human-readable provenance

tag= documents which upstream release the recipe is tracking.
Without it, you have a bare SHA hash in SRCREV and no machine-readable
indication of whether that commit corresponds to v1.2.3
or just some arbitrary point on the branch. tag= makes the recipe self-documenting.

2. Fetcher-level verification

When tag= is specified, the fetcher can verify that the tag actually resolves
to the SRCREV commit. This provides a sanity check — if someone bumps PV but
forgets to update SRCREV (or vice versa), the mismatch will be caught at fetch
time rather than silently building the wrong source.

The script has been done with AI, which probably makes it bigger than it should
but it covers corner cases. All patches in the series are independent.

Done on top of master-next
Suggested-by: Alexander Kanavin <alex.kanavin@gmail.com>

Daniel Turull (4):
  scripts/contrib: add helper to report and fix missing SRC_URI ;tag=
  Add tag in SRC_URI in multiple recipes
  cryptodev-linux: add +git to version
  xmlto: correct srcrev to point to released version

 meta/recipes-bsp/efibootmgr/efibootmgr_18.bb  |   2 +-
 meta/recipes-bsp/efivar/efivar_39.bb          |   2 +-
 meta/recipes-bsp/gnu-efi/gnu-efi_4.0.4.bb     |   2 +-
 .../avahi/avahi-libnss-mdns_0.15.1.bb         |   2 +-
 .../connman/connman-gnome_0.7.bb              |   2 +-
 meta/recipes-connectivity/neard/neard_0.20.bb |   2 +-
 .../slirp/libslirp_4.9.3.bb                   |   2 +-
 meta/recipes-core/seatd/seatd_0.9.3.bb        |   2 +-
 .../sysfsutils/sysfsutils_2.1.1.bb            |   2 +-
 .../bootchart2/bootchart2_0.14.9.bb           |   2 +-
 meta/recipes-devtools/distcc/distcc_3.4.bb    |   2 +-
 meta/recipes-devtools/dnf/dnf_4.24.0.bb       |   2 +-
 meta/recipes-devtools/e2fsprogs/e2fsprogs.inc |   2 +-
 meta/recipes-devtools/libdnf/libdnf_0.75.0.bb |   2 +-
 meta/recipes-devtools/mtd/mtd-utils_2.3.1.bb  |   2 +-
 .../opkg-utils/opkg-utils_0.7.0.bb            |   2 +-
 .../recipes-devtools/patchelf/patchelf_git.bb |   2 +-
 .../python/python3-dtc_1.8.1.bb               |   2 +-
 .../python/python3-pefile_2024.8.26.bb        |   2 +-
 ...-check-update-cvelist-native_2026-06-24.bb |   2 +-
 ...eck-update-nvd-native_2026.06.24-000003.bb |   2 +-
 .../systemd-bootchart_235.bb                  |   2 +-
 meta/recipes-devtools/xmlto/xmlto_0.0.29.bb   |   4 +-
 .../asciidoc/asciidoc_10.2.1.bb               |   2 +-
 .../cracklib/cracklib_2.10.3.bb               |   2 +-
 .../iputils/iputils_20250605.bb               |   2 +-
 meta/recipes-extended/libnsl/libnsl2_2.0.1.bb |   2 +-
 meta/recipes-extended/ltp/ltp_20260529.bb     |   2 +-
 .../net-tools/net-tools_2.10.bb               |   2 +-
 .../xinetd/xinetd_2.3.15.4.bb                 |   2 +-
 meta/recipes-extended/zstd/zstd_1.5.7.bb      |   2 +-
 meta/recipes-gnome/libxmlb/libxmlb_0.3.28.bb  |   2 +-
 .../libepoxy/libepoxy_1.5.10.bb               |   2 +-
 .../matchbox-wm/matchbox-wm_1.2.3.bb          |   2 +-
 meta/recipes-graphics/waffle/waffle_1.8.3.bb  |   2 +-
 .../xorg-lib/libxcvt_0.1.3.bb                 |   2 +-
 .../recipes-kernel/blktrace/blktrace_1.3.0.bb |   2 +-
 meta/recipes-kernel/cryptodev/cryptodev.inc   |   2 +-
 meta/recipes-kernel/dtc/dtc_1.8.1.bb          |   2 +-
 meta/recipes-kernel/powertop/powertop_2.15.bb |   2 +-
 .../matchbox-theme-sato_0.2.bb                |   2 +-
 .../sato-screenshot/sato-screenshot_0.3.bb    |   2 +-
 .../gnome-desktop-testing_2021.1.bb           |   2 +-
 .../libdisplay-info/libdisplay-info_0.3.0.bb  |   2 +-
 .../libseccomp/libseccomp_2.6.0.bb            |   2 +-
 meta/recipes-support/lz4/lz4_1.10.0.bb        |   2 +-
 .../recipes-support/numactl/numactl_2.0.19.bb |   2 +-
 .../rng-tools/rng-tools_6.17.bb               |   2 +-
 .../shared-mime-info_2.5.1.bb                 |   2 +-
 meta/recipes-support/xxhash/xxhash_0.8.3.bb   |   2 +-
 scripts/contrib/check-srcuri-tag.py           | 483 ++++++++++++++++++
 51 files changed, 534 insertions(+), 51 deletions(-)
 create mode 100755 scripts/contrib/check-srcuri-tag.py

-- 
2.34.1



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/4] scripts/contrib: add helper to report and fix missing SRC_URI ;tag=
  2026-07-21 14:48 [PATCH 0/4] Add missing tag parameter in git SRC_URI daniel.turull
@ 2026-07-21 14:48 ` daniel.turull
  2026-07-21 14:48 ` [PATCH 2/4] Add tag in SRC_URI in multiple recipes daniel.turull
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: daniel.turull @ 2026-07-21 14:48 UTC (permalink / raw)
  To: openembedded-core; +Cc: Daniel Turull

From: Daniel Turull <daniel.turull@ericsson.com>

Add a contrib helper which scans parsed recipes for git/gitsm SRC_URI
entries missing a ;tag= parameter.  By default it reports only and does
not construct the BitBake fetcher.  With --query-remote it queries
upstream tags and, when a well-known tag format resolves to the recipe's
SRCREV, suggests it as a ;tag= candidate.  With --write (which implies
--query-remote) the unambiguous candidate is written back to the recipe.

Tag candidate search uses TAG_FORMATS (v${PV}, ${PV}, ${BPN}-${PV})
followed by UPSTREAM_CHECK_GITTAGREGEX if defined in the recipe.  A
candidate is only accepted when it resolves to the recipe's literal
SRCREV on the remote, so floating revisions (AUTOREV) and non-release
PVs are skipped.

Writes are performed via oe.recipeutils.patch_recipe(), which also
localises the change to the .inc file when SRC_URI is defined there.
Only literal SRC_URI entries (no ${...} in the URL token) are modified;
the entry is edited with bb.fetch2.decodeurl()/encodeurl() so the
;tag= parameter is appended without disturbing the other parameters.

Every modified file is printed, with a reminder to review the result
with git diff and test it with bitbake -c fetch.  With --recipe and
--layer the scan can be restricted to a single recipe or layer, and
--fail-on-missing makes the exit status reflect URLs still missing after
any writes complete.

AI-Generated: Kiro with Claude-opus-4.8
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
 scripts/contrib/check-srcuri-tag.py | 483 ++++++++++++++++++++++++++++
 1 file changed, 483 insertions(+)
 create mode 100755 scripts/contrib/check-srcuri-tag.py

diff --git a/scripts/contrib/check-srcuri-tag.py b/scripts/contrib/check-srcuri-tag.py
new file mode 100755
index 0000000000..33a2b781f7
--- /dev/null
+++ b/scripts/contrib/check-srcuri-tag.py
@@ -0,0 +1,483 @@
+#!/usr/bin/env python3
+# SPDX-FileCopyrightText: OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+
+# pylint: disable=invalid-name
+
+"""
+Scan parsed recipes for git/gitsm SRC_URI entries missing a ;tag= parameter.
+
+Default mode reports only.  With --query-remote the script queries upstream
+tags and, when a well-known tag format (v${PV}, ${PV}, ${BPN}-${PV} or the
+recipe's UPSTREAM_CHECK_GITTAGREGEX) resolves to the recipe's SRCREV, suggests
+it as a ;tag= candidate.  With --write (which implies --query-remote) the
+unambiguous candidate is written directly into the file that literally
+defines the SRC_URI entry (which may be a .inc file required by the
+recipe).  Only literal SRC_URI entries (no ${...} in the URL token) are
+modified.
+
+Must be run from an initialized build environment (oe-init-build-env).
+
+Usage examples:
+  check-srcuri-tag.py
+  check-srcuri-tag.py --query-remote
+  check-srcuri-tag.py --write
+  check-srcuri-tag.py --recipe busybox --write
+  check-srcuri-tag.py --layer /path/to/meta-foo
+  check-srcuri-tag.py --fail-on-missing
+"""
+
+import argparse
+import logging
+import os
+import re
+import sys
+from dataclasses import dataclass
+
+scripts_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+sys.path.insert(0, os.path.join(scripts_path, 'lib'))
+
+import scriptpath  # pylint: disable=import-error,wrong-import-position
+if not scriptpath.add_bitbake_lib_path():
+    sys.exit("Unable to find bitbake libraries")
+scriptpath.add_oe_lib_path()
+
+import bb.cache        # pylint: disable=wrong-import-position
+import bb.fetch2       # pylint: disable=wrong-import-position
+import bb.tinfoil      # pylint: disable=wrong-import-position
+import oe.recipeutils  # pylint: disable=wrong-import-position
+
+# Well-known tag formats tried in order when --query-remote is active.
+TAG_FORMATS = ["v${PV}", "${PV}", "${BPN}-${PV}"]
+
+# Cache of remote tags keyed by upstream repository identity.
+_lsremote_cache = {}
+
+
+@dataclass(eq=False)
+class UrlResult:
+    """Outcome for a single git URL within a recipe."""
+    entry: str          # unexpanded SRC_URI token
+    base_url: str       # expanded scheme://host/path (no parameters)
+    name: str           # name= parameter, or ""
+    status: str         # tagged|missing|remote-error|parse-error
+    tag: str = ""       # existing ;tag= value (status == tagged)
+    tag_fmt: str = ""   # suggested tag candidate (status == missing)
+    detail: str = ""    # human-readable note
+
+
+def get_literal_srcrev(name, data):
+    """Return (sha, None) or (None, reason) for the named git URL.
+
+    SRCREV candidates are read unexpanded (to avoid triggering AUTOREV
+    resolution) in the same fallback order used by bb.fetch2, accepting only a
+    plain hex SHA (or the SHA embedded in a cached AUTOINC+<sha> value).
+    """
+    pn = data.getVar("PN") or ""
+    attempts = []
+    if name and name != "default":
+        if pn:
+            attempts.append(f"SRCREV_{name}:pn-{pn}")
+        attempts.append(f"SRCREV_{name}")
+    if pn:
+        attempts.append(f"SRCREV:pn-{pn}")
+    attempts.append("SRCREV")
+
+    for key in attempts:
+        val = data.getVar(key, False)
+        if not val or val == "INVALID":
+            continue
+        if val.startswith("AUTOINC+"):
+            val = val[len("AUTOINC+"):]
+        if "AUTOREV" in val or "AUTOINC" in val:
+            return None, "SRCREV is a floating revision"
+        if "${" in val:
+            return None, "SRCREV is not a literal value"
+        val = val.lower()
+        if re.fullmatch(r'[0-9a-f]{40}|[0-9a-f]{64}', val):
+            return val, None
+        return None, "SRCREV is not a literal SHA"
+    return None, "SRCREV is not set"
+
+
+def get_release_pv(data):
+    """Return (pv, None) for a plain release PV, or (None, reason).
+
+    The unexpanded PV is checked first so PV = "${SRCPV}" or "1.0+git" are
+    rejected before any expansion side effects occur.
+    """
+    pv_raw = data.getVar("PV", False) or ""
+    if not pv_raw or "git" in pv_raw or "SRCPV" in pv_raw:
+        return None, f"PV '{pv_raw}' is not a plain release version"
+    return data.getVar("PV") or pv_raw, None
+
+
+def lsremote_tags(ud, data):
+    """Return ({tag_name: frozenset(shas)}, None) or (None, reason).
+
+    Uses the Git fetcher's _lsremote() so mirrors, credentials and
+    BB_NO_NETWORK are honoured.  Both the tag-object and peeled-commit SHAs of
+    annotated tags are collected under the same tag name.
+    """
+    key = (getattr(ud, 'user', ''), getattr(ud, 'proto', ''),
+           getattr(ud, 'host', ''), getattr(ud, 'path', ''))
+    if key in _lsremote_cache:
+        return _lsremote_cache[key]
+
+    try:
+        output = ud.method._lsremote(ud, data, "refs/tags/*")
+    except (bb.fetch2.NetworkAccess, bb.fetch2.FetchError) as exc:
+        result = (None, f"remote error: {exc}")
+        _lsremote_cache[key] = result
+        return result
+
+    tag_map = {}
+    for line in output.splitlines():
+        parts = line.split(None, 1)
+        if len(parts) != 2:
+            continue
+        sha, ref = parts
+        tag = ref.removeprefix("refs/tags/").removesuffix("^{}")
+        tag_map.setdefault(tag, set()).add(sha)
+
+    result = ({k: frozenset(v) for k, v in tag_map.items()}, None)
+    _lsremote_cache[key] = result
+    return result
+
+
+def deduce_tag_format(ud, srcrev, pv, bpn, data):
+    """Return (tag_fmt, None) if a well-known format resolves to srcrev on the
+    remote, else (None, reason).
+
+    Tries TAG_FORMATS first; if none match and the recipe defines
+    UPSTREAM_CHECK_GITTAGREGEX, that regex is used to find the tag whose
+    captured 'pver' group (normalized from '_' to '.') equals PV and whose SHA
+    matches SRCREV.  A unique regex hit is returned as a literal tag name.
+    """
+    tag_map, err = lsremote_tags(ud, data)
+    if tag_map is None:
+        return None, err
+    if not tag_map:
+        return None, "remote has no tags"
+
+    matches = [fmt for fmt in TAG_FORMATS
+               if srcrev in tag_map.get(
+                   fmt.replace("${PV}", pv).replace("${BPN}", bpn), frozenset())]
+    if len(matches) == 1:
+        return matches[0], None
+    if len(matches) > 1:
+        return None, f"ambiguous: multiple formats match ({', '.join(matches)})"
+
+    check_regex = data.getVar("UPSTREAM_CHECK_GITTAGREGEX", False)
+    if check_regex:
+        try:
+            compiled = re.compile(check_regex)
+        except re.error as exc:
+            return None, f"UPSTREAM_CHECK_GITTAGREGEX is invalid: {exc}"
+        regex_matches = []
+        for tag_name, shas in tag_map.items():
+            m = compiled.fullmatch(tag_name)
+            if (m and "pver" in m.groupdict()
+                    and m.group("pver").replace("_", ".") == pv
+                    and srcrev in shas):
+                regex_matches.append(tag_name)
+        if len(regex_matches) == 1:
+            return regex_matches[0], None
+        if len(regex_matches) > 1:
+            return None, ("ambiguous: UPSTREAM_CHECK_GITTAGREGEX matched "
+                          f"multiple tags ({', '.join(sorted(regex_matches))})")
+
+    return None, "no well-known tag format matched SRCREV on remote"
+
+
+def add_candidate(result, exp_url, name, data):
+    """Fill in result.tag_fmt/detail for a missing-tag URL under --query-remote.
+
+    Sets result.status to 'remote-error' if the remote could not be queried.
+    """
+    srcrev, reason = get_literal_srcrev(name or "default", data)
+    if not srcrev:
+        result.detail = f"no suggestion: {reason}"
+        return
+    pv, reason = get_release_pv(data)
+    if not pv:
+        result.detail = f"no suggestion: {reason}"
+        return
+
+    try:
+        ud = bb.fetch2.FetchData(exp_url, data)
+    except bb.fetch2.FetchError as exc:
+        result.status = "remote-error"
+        result.detail = str(exc)
+        return
+
+    fmt, reason = deduce_tag_format(ud, srcrev, pv, data.getVar("BPN") or "", data)
+    if fmt:
+        result.tag_fmt = fmt
+        result.detail = f"candidate: ;tag={fmt}"
+    elif reason.startswith("remote error"):
+        result.status = "remote-error"
+        result.detail = reason
+    else:
+        result.detail = f"no suggestion: {reason}"
+
+
+def check_url(entry, data, args):
+    """Process a single git/gitsm SRC_URI entry.  Returns a UrlResult."""
+    exp = data.expand(entry)
+    try:
+        scheme, host, path, _u, _p, parm = bb.fetch2.decodeurl(exp)
+    except bb.fetch2.MalformedUrl as exc:
+        return UrlResult(entry, exp, "", "parse-error", detail=str(exc))
+
+    base_url = f"{scheme}://{host}{path}"
+    name = parm.get("name", "")
+    # The git fetcher no longer supports comma-separated name= values.
+    if "," in name:
+        return UrlResult(entry, base_url, name, "parse-error",
+                         detail="comma in name= parameter")
+    if parm.get("tag"):
+        return UrlResult(entry, base_url, name, "tagged", tag=parm["tag"])
+
+    result = UrlResult(entry, base_url, name, "missing")
+    if args.query_remote:
+        add_candidate(result, exp, name, data)
+    return result
+
+
+def check_recipe(data, args):
+    """Return a list of UrlResult for every git/gitsm SRC_URI entry."""
+    entries = oe.recipeutils.split_var_value(
+        data.getVar("SRC_URI", False) or "", assignment=False)
+    return [check_url(e, data, args) for e in entries
+            if e.startswith(("git://", "gitsm://"))]
+
+
+def add_tag_to_entry(entry, tag_fmt):
+    """Return entry with ;tag=<tag_fmt> added (entry must be a literal URL)."""
+    decoded = list(bb.fetch2.decodeurl(entry))
+    decoded[5]["tag"] = tag_fmt
+    return bb.fetch2.encodeurl(decoded)
+
+
+def find_source_file(entry, data):
+    """Return (filepath, None) for the one file whose SRC_URI fragment
+    literally contains entry, or (None, reason) if that can't be determined
+    unambiguously.
+
+    entry must contain no variable references (checked by the caller).  Only
+    files recorded in SRC_URI's variable history are considered, and entry
+    must appear as a whole space-separated token in exactly one of them (this
+    also catches the case where the git URL is set in a .inc file that is
+    require'd by the .bb, which is common for git recipes).
+    """
+    matches = []
+    for event in data.varhistory.variable("SRC_URI") or []:
+        fn = event.get("file")
+        detail = event.get("detail")
+        if not fn or not detail:
+            continue
+        if entry in detail.split() and fn not in matches:
+            matches.append(fn)
+
+    if not matches:
+        return None, "URL not found literally in SRC_URI history"
+    if len(matches) > 1:
+        return None, f"URL set in multiple files: {', '.join(matches)}"
+    return matches[0], None
+
+
+def apply_tag(fn, entry, tag_fmt):
+    """Replace entry with entry;tag=<tag_fmt> in fn.  entry must appear as a
+    whole space/quote-delimited token exactly once.
+
+    Returns (True, None) on success, or (False, reason) on error.
+    """
+    try:
+        with open(fn, encoding="utf-8") as f:
+            content = f.read()
+    except OSError as exc:
+        return False, f"read error: {exc}"
+
+    pattern = re.compile(r'(?<![^\s"])%s(?=[\s"\\]|$)' % re.escape(entry))
+    replacement = add_tag_to_entry(entry, tag_fmt)
+    new_content, count = pattern.subn(lambda _m: replacement, content)
+    if count != 1:
+        return False, f"expected 1 occurrence of URL in {fn}, found {count}"
+
+    try:
+        with open(fn, "w", encoding="utf-8") as f:
+            f.write(new_content)
+    except OSError as exc:
+        return False, f"write error: {exc}"
+    return True, None
+
+
+def write_candidates(data, results, layer_path):
+    """Write unambiguous ;tag= candidates directly into their source file(s).
+
+    Only literal SRC_URI entries (no ${...}) are touched.  Returns the list
+    of (UrlResult, filepath) pairs that were written.
+    """
+    written = []
+    for r in results:
+        if r.status != "missing" or not r.tag_fmt:
+            continue
+        if "${" in r.entry:
+            r.detail = f"write skipped: URL contains variable references ({r.entry})"
+            continue
+        fn, reason = find_source_file(r.entry, data)
+        if not fn:
+            r.detail = f"write skipped: {reason}"
+            continue
+        if layer_path and not under_layer(fn, layer_path):
+            r.detail = f"write skipped: {fn} is outside --layer"
+            continue
+        ok, reason = apply_tag(fn, r.entry, r.tag_fmt)
+        if ok:
+            written.append((r, fn))
+        else:
+            r.detail = f"write skipped: {reason}"
+    return written
+
+
+def under_layer(fn, layer_path):
+    """Return True if fn is under layer_path (already realpath'd)."""
+    try:
+        return os.path.commonpath([os.path.realpath(fn), layer_path]) == layer_path
+    except ValueError:
+        return False
+
+
+def main():
+    """Main entry point."""
+    parser = argparse.ArgumentParser(
+        description="Report (and optionally fix) git SRC_URI entries missing ;tag=",
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        epilog="NOTE: --query-remote (implied by --write) contacts upstream "
+               "git servers.")
+    parser.add_argument("--query-remote", action="store_true",
+                        help="Query upstream remotes to suggest a ;tag= for "
+                             "missing entries (requires network access)")
+    parser.add_argument("--write", action="store_true",
+                        help="Apply unambiguous tag candidates to their source "
+                             "recipe/.inc files; implies --query-remote.  Only "
+                             "literal SRC_URI entries (no ${...}) are modified.")
+    parser.add_argument("--recipe", metavar="PN",
+                        help="Check only this recipe name")
+    parser.add_argument("--layer", metavar="PATH",
+                        help="Check only recipes under this layer directory")
+    parser.add_argument("--fail-on-missing", action="store_true",
+                        help="Exit non-zero if any URLs are still missing ;tag= "
+                             "after this run (remote errors are not counted)")
+    parser.add_argument("--verbose", "-v", action="store_true",
+                        help="Show tagged and parse-error URLs as well")
+    args = parser.parse_args()
+
+    if args.write:
+        args.query_remote = True
+
+    layer_path = None
+    if args.layer:
+        layer_path = os.path.realpath(args.layer)
+        if not os.path.isdir(layer_path):
+            sys.exit(f"error: --layer is not a directory: {args.layer!r}")
+
+    logging.basicConfig(
+        format="%(levelname)s: %(message)s",
+        level=logging.DEBUG if args.verbose else logging.WARNING)
+
+    stats = dict.fromkeys(
+        ("total", "tagged", "missing", "candidate", "written",
+         "remote_error", "parse_error"), 0)
+    modified_files = []
+
+    with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
+        tinfoil.prepare()
+        pkg_pn = tinfoil.cooker.recipecaches[''].pkg_pn
+        checked_files = set()
+
+        for pn in sorted(pkg_pn):
+            if args.recipe and pn != args.recipe:
+                continue
+
+            for fn in pkg_pn[pn]:
+                realfn, _, _ = bb.cache.virtualfn2realfn(fn)
+                if realfn in checked_files:
+                    continue
+                checked_files.add(realfn)
+                if layer_path and not under_layer(realfn, layer_path):
+                    continue
+
+                data = tinfoil.parse_recipe_file(realfn)
+                results = check_recipe(data, args)
+                if not results:
+                    continue
+
+                if args.write:
+                    written = write_candidates(data, results, layer_path)
+                    for _r, wfn in written:
+                        if wfn not in modified_files:
+                            modified_files.append(wfn)
+                else:
+                    written = []
+                written_results = {r for r, _fn in written}
+
+                basename = os.path.basename(realfn)
+                for r in results:
+                    stats["total"] += 1
+                    label = f"{pn}  {basename}"
+                    if r.name and r.name != "default":
+                        label += f"  name={r.name}"
+                    else:
+                        label += f"  {r.base_url}"
+
+                    if r.status == "tagged":
+                        stats["tagged"] += 1
+                        if args.verbose:
+                            print(f"OK:           {label}  tag={r.tag}")
+                    elif r.status == "missing":
+                        stats["missing"] += 1
+                        if r.tag_fmt:
+                            stats["candidate"] += 1
+                        if r in written_results:
+                            stats["written"] += 1
+                            print(f"WRITTEN:      {label}  ;tag={r.tag_fmt}")
+                        else:
+                            suffix = f"  {r.detail}" if r.detail else ""
+                            print(f"MISSING:      {label}{suffix}")
+                    elif r.status == "remote-error":
+                        stats["remote_error"] += 1
+                        print(f"REMOTE-ERROR: {label}  {r.detail}")
+                    elif r.status == "parse-error":
+                        stats["parse_error"] += 1
+                        if args.verbose:
+                            print(f"PARSE-ERROR:  {label}  {r.detail}")
+
+    print("\n--- Summary ---")
+    print(f"Git URLs checked : {stats['total']}")
+    print(f"  Tagged         : {stats['tagged']}")
+    print(f"  Missing tag    : {stats['missing']}")
+    if args.query_remote:
+        print(f"    candidate found: {stats['candidate']}")
+        print(f"  Remote error   : {stats['remote_error']}")
+    if args.write:
+        print(f"  Written        : {stats['written']}")
+    if stats["parse_error"]:
+        print(f"  Parse error    : {stats['parse_error']}")
+
+    if modified_files:
+        print("\nModified files:")
+        for fn in modified_files:
+            print(f"  {fn}")
+        print("\nReview changes with:  git diff")
+        print("Test affected recipes with:  bitbake -c fetch <recipe>")
+
+    if args.fail_on_missing and stats["missing"] - stats["written"] > 0:
+        return 1
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/4] Add tag in SRC_URI in multiple recipes
  2026-07-21 14:48 [PATCH 0/4] Add missing tag parameter in git SRC_URI daniel.turull
  2026-07-21 14:48 ` [PATCH 1/4] scripts/contrib: add helper to report and fix missing SRC_URI ;tag= daniel.turull
@ 2026-07-21 14:48 ` daniel.turull
  2026-07-21 15:02   ` Patchtest results for " patchtest
  2026-07-21 14:48 ` [PATCH 3/4] cryptodev-linux: add +git to version daniel.turull
  2026-07-21 14:48 ` [PATCH 4/4] xmlto: correct srcrev to point to released version daniel.turull
  3 siblings, 1 reply; 9+ messages in thread
From: daniel.turull @ 2026-07-21 14:48 UTC (permalink / raw)
  To: openembedded-core; +Cc: Daniel Turull

From: Daniel Turull <daniel.turull@ericsson.com>

Generated from scripts/contrib/check-srcuri-tag
Tested with bitbake world on qemux86-64

Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
 meta/recipes-bsp/efibootmgr/efibootmgr_18.bb                    | 2 +-
 meta/recipes-bsp/efivar/efivar_39.bb                            | 2 +-
 meta/recipes-bsp/gnu-efi/gnu-efi_4.0.4.bb                       | 2 +-
 meta/recipes-connectivity/avahi/avahi-libnss-mdns_0.15.1.bb     | 2 +-
 meta/recipes-connectivity/connman/connman-gnome_0.7.bb          | 2 +-
 meta/recipes-connectivity/neard/neard_0.20.bb                   | 2 +-
 meta/recipes-connectivity/slirp/libslirp_4.9.3.bb               | 2 +-
 meta/recipes-core/seatd/seatd_0.9.3.bb                          | 2 +-
 meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb                | 2 +-
 meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb           | 2 +-
 meta/recipes-devtools/distcc/distcc_3.4.bb                      | 2 +-
 meta/recipes-devtools/dnf/dnf_4.24.0.bb                         | 2 +-
 meta/recipes-devtools/e2fsprogs/e2fsprogs.inc                   | 2 +-
 meta/recipes-devtools/libdnf/libdnf_0.75.0.bb                   | 2 +-
 meta/recipes-devtools/mtd/mtd-utils_2.3.1.bb                    | 2 +-
 meta/recipes-devtools/opkg-utils/opkg-utils_0.7.0.bb            | 2 +-
 meta/recipes-devtools/patchelf/patchelf_git.bb                  | 2 +-
 meta/recipes-devtools/python/python3-dtc_1.8.1.bb               | 2 +-
 meta/recipes-devtools/python/python3-pefile_2024.8.26.bb        | 2 +-
 .../sbom-cve-check-update-cvelist-native_2026-06-24.bb          | 2 +-
 .../sbom-cve-check-update-nvd-native_2026.06.24-000003.bb       | 2 +-
 .../recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb | 2 +-
 meta/recipes-extended/asciidoc/asciidoc_10.2.1.bb               | 2 +-
 meta/recipes-extended/cracklib/cracklib_2.10.3.bb               | 2 +-
 meta/recipes-extended/iputils/iputils_20250605.bb               | 2 +-
 meta/recipes-extended/libnsl/libnsl2_2.0.1.bb                   | 2 +-
 meta/recipes-extended/ltp/ltp_20260529.bb                       | 2 +-
 meta/recipes-extended/net-tools/net-tools_2.10.bb               | 2 +-
 meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb                 | 2 +-
 meta/recipes-extended/zstd/zstd_1.5.7.bb                        | 2 +-
 meta/recipes-gnome/libxmlb/libxmlb_0.3.28.bb                    | 2 +-
 meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb               | 2 +-
 meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb          | 2 +-
 meta/recipes-graphics/waffle/waffle_1.8.3.bb                    | 2 +-
 meta/recipes-graphics/xorg-lib/libxcvt_0.1.3.bb                 | 2 +-
 meta/recipes-kernel/blktrace/blktrace_1.3.0.bb                  | 2 +-
 meta/recipes-kernel/dtc/dtc_1.8.1.bb                            | 2 +-
 meta/recipes-kernel/powertop/powertop_2.15.bb                   | 2 +-
 .../recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb | 2 +-
 meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb        | 2 +-
 .../gnome-desktop-testing/gnome-desktop-testing_2021.1.bb       | 2 +-
 meta/recipes-support/libdisplay-info/libdisplay-info_0.3.0.bb   | 2 +-
 meta/recipes-support/libseccomp/libseccomp_2.6.0.bb             | 2 +-
 meta/recipes-support/lz4/lz4_1.10.0.bb                          | 2 +-
 meta/recipes-support/numactl/numactl_2.0.19.bb                  | 2 +-
 meta/recipes-support/rng-tools/rng-tools_6.17.bb                | 2 +-
 meta/recipes-support/shared-mime-info/shared-mime-info_2.5.1.bb | 2 +-
 meta/recipes-support/xxhash/xxhash_0.8.3.bb                     | 2 +-
 48 files changed, 48 insertions(+), 48 deletions(-)

diff --git a/meta/recipes-bsp/efibootmgr/efibootmgr_18.bb b/meta/recipes-bsp/efibootmgr/efibootmgr_18.bb
index 6f4178216b..8001496fd0 100644
--- a/meta/recipes-bsp/efibootmgr/efibootmgr_18.bb
+++ b/meta/recipes-bsp/efibootmgr/efibootmgr_18.bb
@@ -10,7 +10,7 @@ DEPENDS = "efivar popt"
 
 COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
 
-SRC_URI = "git://github.com/rhinstaller/efibootmgr.git;protocol=https;branch=main"
+SRC_URI = "git://github.com/rhinstaller/efibootmgr.git;protocol=https;branch=main;tag=${PV}"
 SRCREV = "c3f9f0534e32158f62c43564036878b93b9e0fd6"
 
 inherit pkgconfig
diff --git a/meta/recipes-bsp/efivar/efivar_39.bb b/meta/recipes-bsp/efivar/efivar_39.bb
index e5839f7a99..7b087c135e 100644
--- a/meta/recipes-bsp/efivar/efivar_39.bb
+++ b/meta/recipes-bsp/efivar/efivar_39.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6626bb1e20189cfa95f2c508ba286393"
 
 COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64|riscv64).*-linux"
 
-SRC_URI = "git://github.com/rhinstaller/efivar.git;branch=main;protocol=https \
+SRC_URI = "git://github.com/rhinstaller/efivar.git;branch=main;protocol=https;tag=${PV} \
            file://0001-docs-do-not-build-efisecdb-manpage.patch \
            file://0002-efivarfs-backport-patch-to-update-file-variable-store-on-SetVariableRT.patch \
            file://0003-fix-march-issue-for-ppc64le.patch \
diff --git a/meta/recipes-bsp/gnu-efi/gnu-efi_4.0.4.bb b/meta/recipes-bsp/gnu-efi/gnu-efi_4.0.4.bb
index 9075487b92..13ee39a2d7 100644
--- a/meta/recipes-bsp/gnu-efi/gnu-efi_4.0.4.bb
+++ b/meta/recipes-bsp/gnu-efi/gnu-efi_4.0.4.bb
@@ -15,7 +15,7 @@ LIC_FILES_CHKSUM = "file://gnuefi/crt0-efi-arm.S;beginline=4;endline=16;md5=8b0a
 COMPATIBLE_HOST = "(x86_64.*|i.86.*|aarch64.*|arm.*|riscv64.*)-linux"
 COMPATIBLE_HOST:armv4 = 'null'
 
-SRC_URI = "git://github.com/ncroxon/gnu-efi;protocol=https;branch=master \
+SRC_URI = "git://github.com/ncroxon/gnu-efi;protocol=https;branch=master;tag=${PV} \
            file://0001-Do-not-treat-warnings-as-errors.patch \
            "
 SRCREV = "37cd8f069bde6715eebdc5e38a8f15ee6de5edcf"
diff --git a/meta/recipes-connectivity/avahi/avahi-libnss-mdns_0.15.1.bb b/meta/recipes-connectivity/avahi/avahi-libnss-mdns_0.15.1.bb
index 6bef43262f..bf0fd752f6 100644
--- a/meta/recipes-connectivity/avahi/avahi-libnss-mdns_0.15.1.bb
+++ b/meta/recipes-connectivity/avahi/avahi-libnss-mdns_0.15.1.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1"
 
 DEPENDS = "avahi"
 
-SRC_URI = "git://github.com/lathiat/nss-mdns;branch=master;protocol=https \
+SRC_URI = "git://github.com/lathiat/nss-mdns;branch=master;protocol=https;tag=v${PV} \
            "
 
 SRCREV = "4b3cfe818bf72d99a02b8ca8b8813cb2d6b40633"
diff --git a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
index 0c6e823ea2..06d741bd4d 100644
--- a/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
+++ b/meta/recipes-connectivity/connman/connman-gnome_0.7.bb
@@ -10,7 +10,7 @@ DEPENDS = "gtk+3 dbus-glib dbus-glib-native intltool-native gettext-native"
 
 # 0.7 tag
 SRCREV = "cf3c325b23dae843c5499a113591cfbc98acb143"
-SRC_URI = "git://github.com/connectivity/connman-gnome.git;branch=master;protocol=https \
+SRC_URI = "git://github.com/connectivity/connman-gnome.git;branch=master;protocol=https;tag=${PV} \
            file://0001-Removed-icon-from-connman-gnome-about-applet.patch \
            file://null_check_for_ipv4_config.patch \
            file://images/ \
diff --git a/meta/recipes-connectivity/neard/neard_0.20.bb b/meta/recipes-connectivity/neard/neard_0.20.bb
index 7825b9a4bb..51ae892c29 100644
--- a/meta/recipes-connectivity/neard/neard_0.20.bb
+++ b/meta/recipes-connectivity/neard/neard_0.20.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
 
 DEPENDS = "dbus glib-2.0 libnl autoconf-archive-native"
 
-SRC_URI = "git://github.com/linux-nfc/neard;protocol=https;branch=master \
+SRC_URI = "git://github.com/linux-nfc/neard;protocol=https;branch=master;tag=v${PV} \
            file://neard.in \
            file://Makefile.am-do-not-ship-version.h.patch \
            file://0001-Add-header-dependency-to-nciattach.o.patch \
diff --git a/meta/recipes-connectivity/slirp/libslirp_4.9.3.bb b/meta/recipes-connectivity/slirp/libslirp_4.9.3.bb
index a13b4b55ab..be13cbc1fc 100644
--- a/meta/recipes-connectivity/slirp/libslirp_4.9.3.bb
+++ b/meta/recipes-connectivity/slirp/libslirp_4.9.3.bb
@@ -5,7 +5,7 @@ LICENSE = "BSD-3-Clause AND MIT"
 LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=f95a9bf4a7e411164fe843697ccda59e \
                     file://LICENSE;md5=cfea6044642fd63b90ce9d79f5db64d9"
 
-SRC_URI = "git://gitlab.freedesktop.org/slirp/libslirp.git;protocol=https;branch=master"
+SRC_URI = "git://gitlab.freedesktop.org/slirp/libslirp.git;protocol=https;branch=master;tag=v${PV}"
 SRCREV = "dd76415fce457e319d665eb8210d05c5731360ba"
 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
 
diff --git a/meta/recipes-core/seatd/seatd_0.9.3.bb b/meta/recipes-core/seatd/seatd_0.9.3.bb
index d0802eee60..72c54d58ab 100644
--- a/meta/recipes-core/seatd/seatd_0.9.3.bb
+++ b/meta/recipes-core/seatd/seatd_0.9.3.bb
@@ -6,7 +6,7 @@ LICENSE = "MIT"
 
 LIC_FILES_CHKSUM = "file://LICENSE;md5=715a99d2dd552e6188e74d4ed2914d5a"
 
-SRC_URI = "git://git.sr.ht/~kennylevinsen/seatd;protocol=https;branch=master \
+SRC_URI = "git://git.sr.ht/~kennylevinsen/seatd;protocol=https;branch=master;tag=${PV} \
            file://init"
 SRCREV = "daa8196e10b180b8b0caeafa8e5f860eb1bd6706"
 
diff --git a/meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb b/meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb
index f1975e46a6..13702866cf 100644
--- a/meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb
+++ b/meta/recipes-core/sysfsutils/sysfsutils_2.1.1.bb
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=dcc19fa9307a50017fca61423a7d9754 \
                     file://cmd/GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://lib/LGPL;md5=4fbd65380cdd255951079008b364516c"
 
-SRC_URI = "git://github.com/linux-ras/sysfsutils.git;protocol=https;branch=master \
+SRC_URI = "git://github.com/linux-ras/sysfsutils.git;protocol=https;branch=master;tag=v${PV} \
            file://0001-Modify-my_strncat-function.patch \
 "
 
diff --git a/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb b/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
index 922e665028..77fdd67302 100644
--- a/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
+++ b/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
@@ -89,7 +89,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=44ac4678311254db62edf8fd39cb8124"
 
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+(\.\d+)*)"
 
-SRC_URI = "git://github.com/xrmx/bootchart.git;branch=master;protocol=https \
+SRC_URI = "git://github.com/xrmx/bootchart.git;branch=master;protocol=https;tag=${PV} \
            file://bootchartd_stop.sh \
            file://0001-collector-Allocate-space-on-heap-for-chunks.patch \
            file://0001-bootchartd.in-make-sure-only-one-bootchartd-process.patch \
diff --git a/meta/recipes-devtools/distcc/distcc_3.4.bb b/meta/recipes-devtools/distcc/distcc_3.4.bb
index 392f4ae272..f5f3ebcbef 100644
--- a/meta/recipes-devtools/distcc/distcc_3.4.bb
+++ b/meta/recipes-devtools/distcc/distcc_3.4.bb
@@ -15,7 +15,7 @@ PACKAGECONFIG[popt] = "--without-included-popt,--with-included-popt,popt"
 
 RRECOMMENDS:${PN}-server = "avahi-daemon"
 
-SRC_URI = "git://github.com/distcc/distcc.git;branch=master;protocol=https \
+SRC_URI = "git://github.com/distcc/distcc.git;branch=master;protocol=https;tag=v${PV} \
            file://default \
            file://distcc \
            file://distcc.service \
diff --git a/meta/recipes-devtools/dnf/dnf_4.24.0.bb b/meta/recipes-devtools/dnf/dnf_4.24.0.bb
index d40b85c4b0..31bbb4032b 100644
--- a/meta/recipes-devtools/dnf/dnf_4.24.0.bb
+++ b/meta/recipes-devtools/dnf/dnf_4.24.0.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://PACKAGE-LICENSING;md5=4a0548e303dbc77f067335b4d688e745 \
                     "
 
-SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protocol=https \
+SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protocol=https;tag=${PV} \
            file://0001-Corretly-install-tmpfiles.d-configuration.patch \
            file://0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch \
            file://0005-Do-not-prepend-installroot-to-logdir.patch \
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc b/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc
index e83e8b6afa..e474f165e6 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs.inc
@@ -19,7 +19,7 @@ LIC_FILES_CHKSUM = "file://NOTICE;md5=d50be0580c0b0a7fbc7a4830bbe6c12b \
 SECTION = "base"
 DEPENDS = "util-linux attr autoconf-archive-native"
 
-SRC_URI = "git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git;branch=master;protocol=https"
+SRC_URI = "git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git;branch=master;protocol=https;tag=v${PV}"
 
 inherit autotools gettext texinfo pkgconfig multilib_header update-alternatives ptest
 
diff --git a/meta/recipes-devtools/libdnf/libdnf_0.75.0.bb b/meta/recipes-devtools/libdnf/libdnf_0.75.0.bb
index ddcbc7d9ff..a757257abd 100644
--- a/meta/recipes-devtools/libdnf/libdnf_0.75.0.bb
+++ b/meta/recipes-devtools/libdnf/libdnf_0.75.0.bb
@@ -4,7 +4,7 @@ DESCRIPTION = "This library provides a high level package-manager. It's core lib
 LICENSE = "LGPL-2.1-or-later"
 LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
 
-SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;protocol=https \
+SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;protocol=https;tag=${PV} \
            file://0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch \
            file://0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch \
            file://0001-drop-FindPythonInstDir.cmake.patch \
diff --git a/meta/recipes-devtools/mtd/mtd-utils_2.3.1.bb b/meta/recipes-devtools/mtd/mtd-utils_2.3.1.bb
index e831ebb1d7..cb88b723f8 100644
--- a/meta/recipes-devtools/mtd/mtd-utils_2.3.1.bb
+++ b/meta/recipes-devtools/mtd/mtd-utils_2.3.1.bb
@@ -12,7 +12,7 @@ DEPENDS = "zlib e2fsprogs util-linux"
 RDEPENDS:mtd-utils-tests += "bash"
 
 SRCREV = "053ee1038e5dedae61a88cadfb7bdfe9894d8bb6"
-SRC_URI = "git://git.infradead.org/mtd-utils.git;branch=master \
+SRC_URI = "git://git.infradead.org/mtd-utils.git;branch=master;tag=v${PV} \
            file://ubihealthd.service"
 
 # xattr support creates an additional compile-time dependency on acl because
diff --git a/meta/recipes-devtools/opkg-utils/opkg-utils_0.7.0.bb b/meta/recipes-devtools/opkg-utils/opkg-utils_0.7.0.bb
index 9f1a91e1d3..50d7b10bcc 100644
--- a/meta/recipes-devtools/opkg-utils/opkg-utils_0.7.0.bb
+++ b/meta/recipes-devtools/opkg-utils/opkg-utils_0.7.0.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
                     file://opkg.py;beginline=2;endline=18;md5=ffa11ff3c15eb31c6a7ceaa00cc9f986"
 PROVIDES += "${@bb.utils.contains('PACKAGECONFIG', 'update-alternatives', 'virtual/update-alternatives', '', d)}"
 
-SRC_URI = "git://git.yoctoproject.org/opkg-utils;protocol=https;branch=master \
+SRC_URI = "git://git.yoctoproject.org/opkg-utils;protocol=https;branch=master;tag=${PV} \
            file://0001-update-alternatives-correctly-match-priority.patch \
            "
 SRCREV = "68a969f0e867ace0d94faf8ebe7c7bb67f59d386"
diff --git a/meta/recipes-devtools/patchelf/patchelf_git.bb b/meta/recipes-devtools/patchelf/patchelf_git.bb
index adc1198937..741c1e6612 100644
--- a/meta/recipes-devtools/patchelf/patchelf_git.bb
+++ b/meta/recipes-devtools/patchelf/patchelf_git.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://github.com/NixOS/patchelf"
 
 LICENSE = "GPL-3.0-only"
 
-SRC_URI = "git://github.com/NixOS/patchelf;protocol=https;branch=master"
+SRC_URI = "git://github.com/NixOS/patchelf;protocol=https;branch=master;tag=${PV}"
 SRCREV = "7688b17c18d16f67fa8d5a82a2404c2e3a18648d"
 
 PV = "0.19.1"
diff --git a/meta/recipes-devtools/python/python3-dtc_1.8.1.bb b/meta/recipes-devtools/python/python3-dtc_1.8.1.bb
index ea536d659d..51abf3640a 100644
--- a/meta/recipes-devtools/python/python3-dtc_1.8.1.bb
+++ b/meta/recipes-devtools/python/python3-dtc_1.8.1.bb
@@ -6,7 +6,7 @@ LICENSE = "BSD-2-Clause OR GPL-2.0-only"
 
 DEPENDS = "flex-native bison-native swig-native python3-setuptools-scm-native libyaml dtc"
 
-SRC_URI = "git://git.kernel.org/pub/scm/utils/dtc/dtc.git;branch=main;protocol=https \
+SRC_URI = "git://git.kernel.org/pub/scm/utils/dtc/dtc.git;branch=main;protocol=https;tag=v${PV} \
            "
 
 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-devtools/python/python3-pefile_2024.8.26.bb b/meta/recipes-devtools/python/python3-pefile_2024.8.26.bb
index 11765b3cb3..662413b704 100644
--- a/meta/recipes-devtools/python/python3-pefile_2024.8.26.bb
+++ b/meta/recipes-devtools/python/python3-pefile_2024.8.26.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e34c75178086aca0a17551ffbacaca53"
 
 inherit setuptools3 ptest-python-pytest
 SRCREV = "4b3b1e2e568a88d4f1897d694d684f23d9e270c4"
-SRC_URI = "git://github.com/erocarrera/pefile;branch=master;protocol=https \
+SRC_URI = "git://github.com/erocarrera/pefile;branch=master;protocol=https;tag=v${PV} \
            file://run-ptest"
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-cvelist-native_2026-06-24.bb b/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-cvelist-native_2026-06-24.bb
index ca192bc9cf..ef61eb4628 100644
--- a/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-cvelist-native_2026-06-24.bb
+++ b/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-cvelist-native_2026-06-24.bb
@@ -3,7 +3,7 @@ LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
 
 HOMEPAGE = "https://github.com/CVEProject/cvelistV5"
-SRC_URI = "git://github.com/CVEProject/cvelistV5.git;branch=main;protocol=https;destsuffix="
+SRC_URI = "git://github.com/CVEProject/cvelistV5.git;branch=main;protocol=https;destsuffix=;tag=${PV}_baseline"
 SBOM_CVE_CHECK_DB_NAME = "cvelist"
 
 SRCREV = "966bddf787997b471325e065cae82702a60c64ff"
diff --git a/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-nvd-native_2026.06.24-000003.bb b/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-nvd-native_2026.06.24-000003.bb
index 73d9e77692..95af1a5805 100644
--- a/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-nvd-native_2026.06.24-000003.bb
+++ b/meta/recipes-devtools/sbom-cve-check/sbom-cve-check-update-nvd-native_2026.06.24-000003.bb
@@ -3,7 +3,7 @@ LICENSE = "cve-tou"
 LIC_FILES_CHKSUM = "file://LICENSES/cve-tou.md;md5=bc5bbf146f01e20ece63d83c8916d8fb"
 
 HOMEPAGE = "https://github.com/fkie-cad/nvd-json-data-feeds"
-SRC_URI = "git://github.com/fkie-cad/nvd-json-data-feeds.git;branch=main;protocol=https;destsuffix="
+SRC_URI = "git://github.com/fkie-cad/nvd-json-data-feeds.git;branch=main;protocol=https;destsuffix=;tag=v${PV}"
 SBOM_CVE_CHECK_DB_NAME = "nvd-fkie"
 
 SRCREV = "11e62eba27133a54836b7a081d05ff96f72d879b"
diff --git a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb
index a8976f8a3e..3e435e7777 100644
--- a/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb
+++ b/meta/recipes-devtools/systemd-bootchart/systemd-bootchart_235.bb
@@ -8,7 +8,7 @@ LICENSE = "GPL-2.0-only AND LGPL-2.1-only"
 LIC_FILES_CHKSUM = "file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c \
                     file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe"
 
-SRC_URI = "git://github.com/systemd/systemd-bootchart.git;protocol=https;branch=main \
+SRC_URI = "git://github.com/systemd/systemd-bootchart.git;protocol=https;branch=main;tag=v${PV} \
            file://mips64.patch \
            file://no_lto.patch \
            file://0001-Add-riscv32-support.patch \
diff --git a/meta/recipes-extended/asciidoc/asciidoc_10.2.1.bb b/meta/recipes-extended/asciidoc/asciidoc_10.2.1.bb
index 848c380363..44587e94fb 100644
--- a/meta/recipes-extended/asciidoc/asciidoc_10.2.1.bb
+++ b/meta/recipes-extended/asciidoc/asciidoc_10.2.1.bb
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=aaee33adce0fc7cc40fee23f82f7f101 \
                     file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     "
 
-SRC_URI = "git://github.com/asciidoc/asciidoc-py;protocol=https;branch=main"
+SRC_URI = "git://github.com/asciidoc/asciidoc-py;protocol=https;branch=main;tag=${PV}"
 SRCREV = "21e33efe96ba9a51d99d1150691dae750afd6ed1"
 
 DEPENDS = "libxml2-native libxslt-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
diff --git a/meta/recipes-extended/cracklib/cracklib_2.10.3.bb b/meta/recipes-extended/cracklib/cracklib_2.10.3.bb
index 7feba2c950..48dd72d5f9 100644
--- a/meta/recipes-extended/cracklib/cracklib_2.10.3.bb
+++ b/meta/recipes-extended/cracklib/cracklib_2.10.3.bb
@@ -9,7 +9,7 @@ DEPENDS = "cracklib-native zlib"
 
 EXTRA_OECONF = "--without-python --libdir=${base_libdir}"
 
-SRC_URI = "git://github.com/cracklib/cracklib;protocol=https;branch=main \
+SRC_URI = "git://github.com/cracklib/cracklib;protocol=https;branch=main;tag=v${PV} \
            "
 
 SRCREV = "e73d5db1789d198b5f9ec44b68b9c775c3e6c042"
diff --git a/meta/recipes-extended/iputils/iputils_20250605.bb b/meta/recipes-extended/iputils/iputils_20250605.bb
index cdebf28ca3..4b09fd2083 100644
--- a/meta/recipes-extended/iputils/iputils_20250605.bb
+++ b/meta/recipes-extended/iputils/iputils_20250605.bb
@@ -8,7 +8,7 @@ LICENSE = "BSD-3-Clause AND GPL-2.0-or-later"
 
 LIC_FILES_CHKSUM = "file://LICENSE;md5=627cc07ec86a45951d43e30658bbd819"
 
-SRC_URI = "git://github.com/iputils/iputils;branch=master;protocol=https \
+SRC_URI = "git://github.com/iputils/iputils;branch=master;protocol=https;tag=${PV} \
           "
 SRCREV = "6e1cb146547eb6fbb127ffc8397a9241be0d33c2"
 
diff --git a/meta/recipes-extended/libnsl/libnsl2_2.0.1.bb b/meta/recipes-extended/libnsl/libnsl2_2.0.1.bb
index ff4ae6c243..4d588e39aa 100644
--- a/meta/recipes-extended/libnsl/libnsl2_2.0.1.bb
+++ b/meta/recipes-extended/libnsl/libnsl2_2.0.1.bb
@@ -12,7 +12,7 @@ DEPENDS = "libtirpc"
 
 CVE_PRODUCT = "libnsl_project:libnsl"
 
-SRC_URI = "git://github.com/thkukuk/libnsl;branch=master;protocol=https"
+SRC_URI = "git://github.com/thkukuk/libnsl;branch=master;protocol=https;tag=v${PV}"
 SRCREV = "d4b22e54b5e6637a69b26eab5faad2a326c9b182"
 
 inherit autotools pkgconfig gettext
diff --git a/meta/recipes-extended/ltp/ltp_20260529.bb b/meta/recipes-extended/ltp/ltp_20260529.bb
index 0fc3946aa4..f3e20daf85 100644
--- a/meta/recipes-extended/ltp/ltp_20260529.bb
+++ b/meta/recipes-extended/ltp/ltp_20260529.bb
@@ -26,7 +26,7 @@ CFLAGS:append:powerpc64 = " -D__SANE_USERSPACE_TYPES__"
 CFLAGS:append:mipsarchn64 = " -D__SANE_USERSPACE_TYPES__"
 SRCREV = "3a64d78f58bdceba93ed321e91215fb969a047ed"
 
-SRC_URI = "git://github.com/linux-test-project/ltp.git;branch=master;protocol=https \
+SRC_URI = "git://github.com/linux-test-project/ltp.git;branch=master;protocol=https;tag=${PV} \
            file://0001-Remove-OOM-tests-from-runtest-mm.patch \
            file://0001-Add-__clear_cache-declaration-for-clang.patch \
            file://0001-syscalls-semctl08-Skip-semctl08-when-__USE_TIME64_RE.patch \
diff --git a/meta/recipes-extended/net-tools/net-tools_2.10.bb b/meta/recipes-extended/net-tools/net-tools_2.10.bb
index a21916fb26..a3c3d2920c 100644
--- a/meta/recipes-extended/net-tools/net-tools_2.10.bb
+++ b/meta/recipes-extended/net-tools/net-tools_2.10.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://ifconfig.c;beginline=11;endline=15;md5=d1ca372080ad5401e23ca0afc35cf9ba"
 
 SRCREV = "80d7b95067f1f22fece9537dea6dff53081f4886"
-SRC_URI = "git://git.code.sf.net/p/net-tools/code;protocol=https;branch=master \
+SRC_URI = "git://git.code.sf.net/p/net-tools/code;protocol=https;branch=master;tag=v${PV} \
     file://net-tools-config.h \
     file://net-tools-config.make \
     file://Add_missing_headers.patch \
diff --git a/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb b/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb
index a15ea43d66..c82ea65ee2 100644
--- a/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb
+++ b/meta/recipes-extended/xinetd/xinetd_2.3.15.4.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=55c5fdf02cfcca3fc9621b6f2ceae10f"
 
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
 
-SRC_URI = "git://github.com/openSUSE/xinetd.git;protocol=https;branch=master \
+SRC_URI = "git://github.com/openSUSE/xinetd.git;protocol=https;branch=master;tag=${PV} \
            file://0001-Use-monotonic-time.patch \
            file://xinetd.init \
            file://xinetd.default \
diff --git a/meta/recipes-extended/zstd/zstd_1.5.7.bb b/meta/recipes-extended/zstd/zstd_1.5.7.bb
index 4960ed5b48..ef0bd54c9c 100644
--- a/meta/recipes-extended/zstd/zstd_1.5.7.bb
+++ b/meta/recipes-extended/zstd/zstd_1.5.7.bb
@@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0822a32f7acdbe013606746641746ee8 \
                     file://COPYING;md5=39bba7d2cf0ba1036f2a6e2be52fe3f0 \
                     "
 
-SRC_URI = "git://github.com/facebook/zstd.git;branch=release;protocol=https"
+SRC_URI = "git://github.com/facebook/zstd.git;branch=release;protocol=https;tag=v${PV}"
 
 SRCREV = "f8745da6ff1ad1e7bab384bd1f9d742439278e99"
 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
diff --git a/meta/recipes-gnome/libxmlb/libxmlb_0.3.28.bb b/meta/recipes-gnome/libxmlb/libxmlb_0.3.28.bb
index 0e1c815362..47c07d0c29 100644
--- a/meta/recipes-gnome/libxmlb/libxmlb_0.3.28.bb
+++ b/meta/recipes-gnome/libxmlb/libxmlb_0.3.28.bb
@@ -4,7 +4,7 @@ LICENSE = "LGPL-2.1-only"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=1803fa9c2c3ce8cb06b4861d75310742"
 
 SRC_URI = " \
-	git://github.com/hughsie/libxmlb.git;branch=main;protocol=https \
+	git://github.com/hughsie/libxmlb.git;branch=main;protocol=https;tag=${PV} \
 	file://0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch \
 	file://run-ptest \
 "
diff --git a/meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb b/meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb
index 2427ce3f96..8c1011e94a 100644
--- a/meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb
+++ b/meta/recipes-graphics/libepoxy/libepoxy_1.5.10.bb
@@ -9,7 +9,7 @@ SECTION = "libs"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://COPYING;md5=58ef4c80d401e07bd9ee8b6b58cf464b"
 
-SRC_URI = "git://github.com/anholt/libepoxy;branch=master;protocol=https"
+SRC_URI = "git://github.com/anholt/libepoxy;branch=master;protocol=https;tag=${PV}"
 SRCREV = "c84bc9459357a40e46e2fec0408d04fbdde2c973"
 
 inherit meson pkgconfig features_check github-releases
diff --git a/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb b/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb
index 3359193d65..1efacd2f51 100644
--- a/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb
+++ b/meta/recipes-graphics/matchbox-wm/matchbox-wm_1.2.3.bb
@@ -11,7 +11,7 @@ SECTION = "x11/wm"
 DEPENDS = "libmatchbox virtual/libx11 libxext libxrender startup-notification expat gconf libxcursor libxfixes"
 
 SRCREV = "ce8c1053270d960a7235ab5c3435f707541810a4"
-SRC_URI = "git://git.yoctoproject.org/matchbox-window-manager;branch=master;protocol=https \
+SRC_URI = "git://git.yoctoproject.org/matchbox-window-manager;branch=master;protocol=https;tag=${PV} \
            file://kbdconfig"
 
 inherit autotools pkgconfig features_check
diff --git a/meta/recipes-graphics/waffle/waffle_1.8.3.bb b/meta/recipes-graphics/waffle/waffle_1.8.3.bb
index 377187b499..1a2265b4c6 100644
--- a/meta/recipes-graphics/waffle/waffle_1.8.3.bb
+++ b/meta/recipes-graphics/waffle/waffle_1.8.3.bb
@@ -9,7 +9,7 @@ LICENSE = "BSD-2-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4c5154407c2490750dd461c50ad94797 \
                     file://include/waffle-1/waffle.h;endline=24;md5=61dbf8697f61c78645e75a93c585b1bf"
 
-SRC_URI = "git://gitlab.freedesktop.org/mesa/waffle.git;protocol=https;branch=maint-1.8"
+SRC_URI = "git://gitlab.freedesktop.org/mesa/waffle.git;protocol=https;branch=maint-1.8;tag=v${PV}"
 SRCREV = "920b709036d7313b59007435786fc3da61af31ab"
 
 inherit meson features_check lib_package bash-completion pkgconfig
diff --git a/meta/recipes-graphics/xorg-lib/libxcvt_0.1.3.bb b/meta/recipes-graphics/xorg-lib/libxcvt_0.1.3.bb
index 1e2c626143..aed61b0216 100644
--- a/meta/recipes-graphics/xorg-lib/libxcvt_0.1.3.bb
+++ b/meta/recipes-graphics/xorg-lib/libxcvt_0.1.3.bb
@@ -6,7 +6,7 @@ LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://COPYING;md5=129947a06984d6faa6f9a9788fa2a03f"
 SECTION = "x11/libs"
 
-SRC_URI = "git://gitlab.freedesktop.org/xorg/lib/libxcvt.git;protocol=https;branch=master"
+SRC_URI = "git://gitlab.freedesktop.org/xorg/lib/libxcvt.git;protocol=https;branch=master;tag=${BPN}-${PV}"
 SRCREV = "dd8631c61465cc0de5e476c7a98e56528d62b163"
 
 inherit meson
diff --git a/meta/recipes-kernel/blktrace/blktrace_1.3.0.bb b/meta/recipes-kernel/blktrace/blktrace_1.3.0.bb
index 2c1b6b1d6c..6f9e19b1a9 100644
--- a/meta/recipes-kernel/blktrace/blktrace_1.3.0.bb
+++ b/meta/recipes-kernel/blktrace/blktrace_1.3.0.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
 
 DEPENDS = "libaio"
 
-SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git;protocol=https;branch=master \
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git;protocol=https;branch=master;tag=${BPN}-${PV} \
            file://0001-bno_plot.py-btt_plot.py-Ask-for-python3-specifically.patch \
           "
 
diff --git a/meta/recipes-kernel/dtc/dtc_1.8.1.bb b/meta/recipes-kernel/dtc/dtc_1.8.1.bb
index e2c7edcc46..ade36a4e58 100644
--- a/meta/recipes-kernel/dtc/dtc_1.8.1.bb
+++ b/meta/recipes-kernel/dtc/dtc_1.8.1.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     "
 
 SRC_URI = " \
-    git://git.kernel.org/pub/scm/utils/dtc/dtc.git;branch=main;protocol=https \
+    git://git.kernel.org/pub/scm/utils/dtc/dtc.git;branch=main;protocol=https;tag=v${PV} \
 "
 SRCREV = "8f48565e5cfedc74d3f7512f1e0188e9d85dc1de"
 
diff --git a/meta/recipes-kernel/powertop/powertop_2.15.bb b/meta/recipes-kernel/powertop/powertop_2.15.bb
index a9008b4074..5dceac17d3 100644
--- a/meta/recipes-kernel/powertop/powertop_2.15.bb
+++ b/meta/recipes-kernel/powertop/powertop_2.15.bb
@@ -6,7 +6,7 @@ DEPENDS = "ncurses libnl pciutils autoconf-archive-native"
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
 
-SRC_URI = "git://github.com/fenrus75/powertop;protocol=https;branch=master \
+SRC_URI = "git://github.com/fenrus75/powertop;protocol=https;branch=master;tag=v${PV} \
            file://0001-wakeup_xxx.h-include-limits.h.patch \
            "
 SRCREV = "d51ad395436d4d1dcc3ca46e1519ffeb475bf651"
diff --git a/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb b/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb
index ece4f25eca..3ec0027917 100644
--- a/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb
+++ b/meta/recipes-sato/matchbox-theme-sato/matchbox-theme-sato_0.2.bb
@@ -2,6 +2,6 @@ require matchbox-theme-sato.inc
 
 # SRCREV tagged 0.2
 SRCREV = "df085ba9cdaeaf2956890b0e29d7ea1779bf6c78"
-SRC_URI = "git://git.yoctoproject.org/matchbox-sato;branch=master;protocol=https"
+SRC_URI = "git://git.yoctoproject.org/matchbox-sato;branch=master;protocol=https;tag=${PV}"
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
 
diff --git a/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb b/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb
index 27850a8b98..adb9251fd7 100644
--- a/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb
+++ b/meta/recipes-sato/sato-screenshot/sato-screenshot_0.3.bb
@@ -11,7 +11,7 @@ DEPENDS = "matchbox-panel-2 gtk+3"
 
 # SRCREV tagged 0.3
 SRCREV = "9250fa5a012d84ff45984e8c4345ee7635227756"
-SRC_URI = "git://git.yoctoproject.org/screenshot;branch=master;protocol=https"
+SRC_URI = "git://git.yoctoproject.org/screenshot;branch=master;protocol=https;tag=${PV}"
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))"
 
 inherit autotools pkgconfig features_check
diff --git a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb
index 4fcad4814b..30e4f1882f 100644
--- a/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb
+++ b/meta/recipes-support/gnome-desktop-testing/gnome-desktop-testing_2021.1.bb
@@ -9,7 +9,7 @@ LICENSE = "LGPL-2.0-or-later"
 LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
                     file://src/gnome-desktop-testing-runner.c;beginline=1;endline=20;md5=7ef3ad9da2ffcf7707dc11151fe007f4"
 
-SRC_URI = "git://gitlab.gnome.org/GNOME/gnome-desktop-testing.git;protocol=https;branch=master \
+SRC_URI = "git://gitlab.gnome.org/GNOME/gnome-desktop-testing.git;protocol=https;branch=master;tag=v${PV} \
            file://0001-fix-non-literal-format-string-issue-with-clang.patch \
           "
 SRCREV = "e346cd4ed2e2102c9b195b614f3c642d23f5f6e7"
diff --git a/meta/recipes-support/libdisplay-info/libdisplay-info_0.3.0.bb b/meta/recipes-support/libdisplay-info/libdisplay-info_0.3.0.bb
index 3dc02261dd..380c12b867 100644
--- a/meta/recipes-support/libdisplay-info/libdisplay-info_0.3.0.bb
+++ b/meta/recipes-support/libdisplay-info/libdisplay-info_0.3.0.bb
@@ -8,7 +8,7 @@ LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=e4426409957080ee0352128354cea2de"
 DEPENDS = "hwdata-native"
 
-SRC_URI = "git://gitlab.freedesktop.org/emersion/libdisplay-info.git;branch=main;protocol=https"
+SRC_URI = "git://gitlab.freedesktop.org/emersion/libdisplay-info.git;branch=main;protocol=https;tag=${PV}"
 SRCREV = "47a5590e9c4eb35d67651b8c05a55f1a48259329"
 
 inherit meson pkgconfig lib_package
diff --git a/meta/recipes-support/libseccomp/libseccomp_2.6.0.bb b/meta/recipes-support/libseccomp/libseccomp_2.6.0.bb
index b356862dfd..44260e3032 100644
--- a/meta/recipes-support/libseccomp/libseccomp_2.6.0.bb
+++ b/meta/recipes-support/libseccomp/libseccomp_2.6.0.bb
@@ -9,7 +9,7 @@ DEPENDS += "gperf-native"
 
 SRCREV = "c7c0caed1d04292500ed4b9bb386566053eb9775"
 
-SRC_URI = "git://github.com/seccomp/libseccomp.git;branch=release-2.6;protocol=https \
+SRC_URI = "git://github.com/seccomp/libseccomp.git;branch=release-2.6;protocol=https;tag=v${PV} \
            file://0001-api-fix-seccomp_export_bpf_mem-out-of-bounds-read.patch \
            file://run-ptest \
            "
diff --git a/meta/recipes-support/lz4/lz4_1.10.0.bb b/meta/recipes-support/lz4/lz4_1.10.0.bb
index 61a7237f83..5a39f89871 100644
--- a/meta/recipes-support/lz4/lz4_1.10.0.bb
+++ b/meta/recipes-support/lz4/lz4_1.10.0.bb
@@ -12,7 +12,7 @@ PE = "1"
 
 SRCREV = "ebb370ca83af193212df4dcbadcc5d87bc0de2f0"
 
-SRC_URI = "git://github.com/lz4/lz4.git;branch=release;protocol=https \
+SRC_URI = "git://github.com/lz4/lz4.git;branch=release;protocol=https;tag=v${PV} \
            file://reproducibility.patch \
            file://run-ptest \
            file://fix-null-error-handling.patch \
diff --git a/meta/recipes-support/numactl/numactl_2.0.19.bb b/meta/recipes-support/numactl/numactl_2.0.19.bb
index 5fd35f1770..35bb401935 100644
--- a/meta/recipes-support/numactl/numactl_2.0.19.bb
+++ b/meta/recipes-support/numactl/numactl_2.0.19.bb
@@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://README.md;beginline=19;endline=32;md5=9f34c3af4ed6f3f
 
 SRCREV = "3bc85e37d5a30da6790cb7e8bb488bb8f679170f"
 
-SRC_URI = "git://github.com/numactl/numactl;branch=master;protocol=https \
+SRC_URI = "git://github.com/numactl/numactl;branch=master;protocol=https;tag=v${PV} \
            file://Fix-the-test-output-format.patch \
            file://Makefile \
            file://run-ptest \
diff --git a/meta/recipes-support/rng-tools/rng-tools_6.17.bb b/meta/recipes-support/rng-tools/rng-tools_6.17.bb
index 9085658697..a6578c0fe0 100644
--- a/meta/recipes-support/rng-tools/rng-tools_6.17.bb
+++ b/meta/recipes-support/rng-tools/rng-tools_6.17.bb
@@ -6,7 +6,7 @@ LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 DEPENDS = "openssl libcap"
 
-SRC_URI = "git://github.com/nhorman/rng-tools.git;branch=master;protocol=https \
+SRC_URI = "git://github.com/nhorman/rng-tools.git;branch=master;protocol=https;tag=v${PV} \
            file://init \
            file://default \
            file://rng-tools.service \
diff --git a/meta/recipes-support/shared-mime-info/shared-mime-info_2.5.1.bb b/meta/recipes-support/shared-mime-info/shared-mime-info_2.5.1.bb
index f4551c8f59..7ff69a4c99 100644
--- a/meta/recipes-support/shared-mime-info/shared-mime-info_2.5.1.bb
+++ b/meta/recipes-support/shared-mime-info/shared-mime-info_2.5.1.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
 DEPENDS = "libxml2 glib-2.0 shared-mime-info-native xmlto-native"
 
-SRC_URI = "git://gitlab.freedesktop.org/xdg/shared-mime-info.git;protocol=https;branch=master \
+SRC_URI = "git://gitlab.freedesktop.org/xdg/shared-mime-info.git;protocol=https;branch=master;tag=${PV} \
            "
 SRCREV = "fd8ab89c20093f1bfba8fa9e302ba584fffd0fd7"
 
diff --git a/meta/recipes-support/xxhash/xxhash_0.8.3.bb b/meta/recipes-support/xxhash/xxhash_0.8.3.bb
index 75b34bb0a2..dc9bbe5563 100644
--- a/meta/recipes-support/xxhash/xxhash_0.8.3.bb
+++ b/meta/recipes-support/xxhash/xxhash_0.8.3.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=13be6b481ff5616f77dda971191bb29b \
                     file://cli/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     "
 
-SRC_URI = "git://github.com/Cyan4973/xxHash.git;branch=release;protocol=https"
+SRC_URI = "git://github.com/Cyan4973/xxHash.git;branch=release;protocol=https;tag=v${PV}"
 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
 
 SRCREV = "e626a72bc2321cd320e953a0ccf1584cad60f363"
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/4] cryptodev-linux: add +git to version
  2026-07-21 14:48 [PATCH 0/4] Add missing tag parameter in git SRC_URI daniel.turull
  2026-07-21 14:48 ` [PATCH 1/4] scripts/contrib: add helper to report and fix missing SRC_URI ;tag= daniel.turull
  2026-07-21 14:48 ` [PATCH 2/4] Add tag in SRC_URI in multiple recipes daniel.turull
@ 2026-07-21 14:48 ` daniel.turull
  2026-07-21 14:48 ` [PATCH 4/4] xmlto: correct srcrev to point to released version daniel.turull
  3 siblings, 0 replies; 9+ messages in thread
From: daniel.turull @ 2026-07-21 14:48 UTC (permalink / raw)
  To: openembedded-core; +Cc: Daniel Turull

From: Daniel Turull <daniel.turull@ericsson.com>

1.14 version doesn't match the SRCREV in the recipe

1.14 released on Jul 19, 2024  135cbff
https://github.com/cryptodev-linux/cryptodev-linux/releases/tag/cryptodev-linux-1.14

current srcrev Nov 3, 2025
https://github.com/cryptodev-linux/cryptodev-linux/commit/08644db02d43478f802755903212f5ee506af73b

Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
 meta/recipes-kernel/cryptodev/cryptodev.inc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-kernel/cryptodev/cryptodev.inc b/meta/recipes-kernel/cryptodev/cryptodev.inc
index dcd5ec140c..8b209e92ba 100644
--- a/meta/recipes-kernel/cryptodev/cryptodev.inc
+++ b/meta/recipes-kernel/cryptodev/cryptodev.inc
@@ -11,6 +11,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 SRC_URI = "git://github.com/cryptodev-linux/cryptodev-linux;branch=master;protocol=https \
            "
 SRCREV = "08644db02d43478f802755903212f5ee506af73b"
-PV = "1.14"
+PV = "1.14+git"
 
 CLEANBROKEN = "1"
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/4] xmlto: correct srcrev to point to released version
  2026-07-21 14:48 [PATCH 0/4] Add missing tag parameter in git SRC_URI daniel.turull
                   ` (2 preceding siblings ...)
  2026-07-21 14:48 ` [PATCH 3/4] cryptodev-linux: add +git to version daniel.turull
@ 2026-07-21 14:48 ` daniel.turull
  3 siblings, 0 replies; 9+ messages in thread
From: daniel.turull @ 2026-07-21 14:48 UTC (permalink / raw)
  To: openembedded-core; +Cc: Daniel Turull

From: Daniel Turull <daniel.turull@ericsson.com>

0.0.29 released has done Jun 11, 2024, 635dcd5bc8
https://codeberg.org/xmlto/xmlto/tags

current srcrev was 1 commit ahead
https://codeberg.org/xmlto/xmlto/commit/74862a684907ada3d4ed2ce0f8111adf626e1456

Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
 meta/recipes-devtools/xmlto/xmlto_0.0.29.bb | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/meta/recipes-devtools/xmlto/xmlto_0.0.29.bb b/meta/recipes-devtools/xmlto/xmlto_0.0.29.bb
index c26cd21dd0..29652bd7d6 100644
--- a/meta/recipes-devtools/xmlto/xmlto_0.0.29.bb
+++ b/meta/recipes-devtools/xmlto/xmlto_0.0.29.bb
@@ -6,8 +6,8 @@ LICENSE = "GPL-2.0-only"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
 
-SRCREV = "74862a684907ada3d4ed2ce0f8111adf626e1456"
-SRC_URI = "git://codeberg.org/xmlto/xmlto.git;protocol=https;branch=master"
+SRCREV = "635dcd5bc84a7b67a3a2050a179d96e1d3050b15"
+SRC_URI = "git://codeberg.org/xmlto/xmlto.git;protocol=https;branch=master;tag=${PV}"
 
 inherit autotools
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Patchtest results for [PATCH 2/4] Add tag in SRC_URI in multiple recipes
  2026-07-21 14:48 ` [PATCH 2/4] Add tag in SRC_URI in multiple recipes daniel.turull
@ 2026-07-21 15:02   ` patchtest
  2026-07-22  7:08     ` [OE-core] " Daniel Turull
  0 siblings, 1 reply; 9+ messages in thread
From: patchtest @ 2026-07-21 15:02 UTC (permalink / raw)
  To: daniel.turull; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 3036 bytes --]

Thank you for your submission. Patchtest identified one
or more issues with the patch. Please see the log below for
more information:

---
Testing patch /home/patchtest/share/mboxes/2-4-Add-tag-in-SRC_URI-in-multiple-recipes.patch

FAIL: test shortlog format: Commit shortlog (first line of commit message) should follow the format "<target>: <summary>" (test_mbox.TestMbox.test_shortlog_format)

PASS: pretest src uri left files (test_metadata.TestMetadata.pretest_src_uri_left_files)
PASS: test CVE check ignore (test_metadata.TestMetadata.test_cve_check_ignore)
PASS: test Signed-off-by presence (test_mbox.TestMbox.test_signed_off_by_presence)
PASS: test author valid (test_mbox.TestMbox.test_author_valid)
PASS: test commit message presence (test_mbox.TestMbox.test_commit_message_presence)
PASS: test commit message user tags (test_mbox.TestMbox.test_commit_message_user_tags)
PASS: test lic files chksum modified not mentioned (test_metadata.TestMetadata.test_lic_files_chksum_modified_not_mentioned)
PASS: test max line length (test_metadata.TestMetadata.test_max_line_length)
PASS: test mbox format (test_mbox.TestMbox.test_mbox_format)
PASS: test non-AUH upgrade (test_mbox.TestMbox.test_non_auh_upgrade)
PASS: test shortlog length (test_mbox.TestMbox.test_shortlog_length)
PASS: test src uri left files (test_metadata.TestMetadata.test_src_uri_left_files)
PASS: test target mailing list (test_mbox.TestMbox.test_target_mailing_list)

SKIP: pretest pylint: No python related patches, skipping test (test_python_pylint.PyLint.pretest_pylint)
SKIP: test CVE tag format: No new source patches introduced (test_patch.TestPatch.test_cve_tag_format)
SKIP: test Signed-off-by presence: No new source patches introduced (test_patch.TestPatch.test_signed_off_by_presence)
SKIP: test Upstream-Status presence: No new source patches introduced (test_patch.TestPatch.test_upstream_status_presence_format)
SKIP: test bugzilla entry format: No bug ID found (test_mbox.TestMbox.test_bugzilla_entry_format)
SKIP: test lic files chksum presence: No added recipes, skipping test (test_metadata.TestMetadata.test_lic_files_chksum_presence)
SKIP: test license presence: No added recipes, skipping test (test_metadata.TestMetadata.test_license_presence)
SKIP: test pylint: No python related patches, skipping test (test_python_pylint.PyLint.test_pylint)
SKIP: test series merge on head: Merge test is disabled for now (test_mbox.TestMbox.test_series_merge_on_head)
SKIP: test summary presence: No added recipes, skipping test (test_metadata.TestMetadata.test_summary_presence)

---

Please address the issues identified and
submit a new revision of the patch, or alternatively, reply to this
email with an explanation of why the patch should be accepted. If you
believe these results are due to an error in patchtest, please submit a
bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest' category
under 'Yocto Project Subprojects'). For more information on specific
failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
you!

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [OE-core] Patchtest results for [PATCH 2/4] Add tag in SRC_URI in multiple recipes
  2026-07-21 15:02   ` Patchtest results for " patchtest
@ 2026-07-22  7:08     ` Daniel Turull
  2026-07-22  7:57       ` Yoann Congal
  0 siblings, 1 reply; 9+ messages in thread
From: Daniel Turull @ 2026-07-22  7:08 UTC (permalink / raw)
  To: patchtest@automation.yoctoproject.org
  Cc: openembedded-core@lists.openembedded.org

On Tue, 2026-07-21 at 15:02 +0000, Patchtest via lists.openembedded.org
wrote:
> Thank you for your submission. Patchtest identified one
> or more issues with the patch. Please see the log below for
> more information:
> 
> ---
> Testing patch /home/patchtest/share/mboxes/2-4-Add-tag-in-SRC_URI-in-
> multiple-recipes.patch
> 
> FAIL: test shortlog format: Commit shortlog (first line of commit
> message) should follow the format "<target>: <summary>"
> (test_mbox.TestMbox.test_shortlog_format)
> 
> PASS: pretest src uri left files
> (test_metadata.TestMetadata.pretest_src_uri_left_files)
> PASS: test CVE check ignore
> (test_metadata.TestMetadata.test_cve_check_ignore)
> PASS: test Signed-off-by presence
> (test_mbox.TestMbox.test_signed_off_by_presence)
> PASS: test author valid (test_mbox.TestMbox.test_author_valid)
> PASS: test commit message presence
> (test_mbox.TestMbox.test_commit_message_presence)
> PASS: test commit message user tags
> (test_mbox.TestMbox.test_commit_message_user_tags)
> PASS: test lic files chksum modified not mentioned
> (test_metadata.TestMetadata.test_lic_files_chksum_modified_not_mentio
> ned)
> PASS: test max line length
> (test_metadata.TestMetadata.test_max_line_length)
> PASS: test mbox format (test_mbox.TestMbox.test_mbox_format)
> PASS: test non-AUH upgrade (test_mbox.TestMbox.test_non_auh_upgrade)
> PASS: test shortlog length (test_mbox.TestMbox.test_shortlog_length)
> PASS: test src uri left files
> (test_metadata.TestMetadata.test_src_uri_left_files)
> PASS: test target mailing list
> (test_mbox.TestMbox.test_target_mailing_list)
> 
> SKIP: pretest pylint: No python related patches, skipping test
> (test_python_pylint.PyLint.pretest_pylint)
> SKIP: test CVE tag format: No new source patches introduced
> (test_patch.TestPatch.test_cve_tag_format)
> SKIP: test Signed-off-by presence: No new source patches introduced
> (test_patch.TestPatch.test_signed_off_by_presence)
> SKIP: test Upstream-Status presence: No new source patches introduced
> (test_patch.TestPatch.test_upstream_status_presence_format)
> SKIP: test bugzilla entry format: No bug ID found
> (test_mbox.TestMbox.test_bugzilla_entry_format)
> SKIP: test lic files chksum presence: No added recipes, skipping test
> (test_metadata.TestMetadata.test_lic_files_chksum_presence)
> SKIP: test license presence: No added recipes, skipping test
> (test_metadata.TestMetadata.test_license_presence)
> SKIP: test pylint: No python related patches, skipping test
> (test_python_pylint.PyLint.test_pylint)
> SKIP: test series merge on head: Merge test is disabled for now
> (test_mbox.TestMbox.test_series_merge_on_head)
> SKIP: test summary presence: No added recipes, skipping test
> (test_metadata.TestMetadata.test_summary_presence)
> 
> ---
> 
> Please address the issues identified and
> submit a new revision of the patch, or alternatively, reply to this
> email with an explanation of why the patch should be accepted. 

The patch affects multiple recipes, so I don't know which target it
should be.

> If you
> believe these results are due to an error in patchtest, please submit
> a
> bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest'
> category
> under 'Yocto Project Subprojects'). For more information on specific
> failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
> you!
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#241550):
> https://lists.openembedded.org/g/openembedded-core/message/241550
> Mute This Topic: https://lists.openembedded.org/mt/120378186/6330526
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe:
> https://lists.openembedded.org/g/openembedded-core/unsub [
> daniel.turull@ericsson.com]
> -=-=-=-=-=-=-=-=-=-=-=-
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [OE-core] Patchtest results for [PATCH 2/4] Add tag in SRC_URI in multiple recipes
  2026-07-22  7:08     ` [OE-core] " Daniel Turull
@ 2026-07-22  7:57       ` Yoann Congal
  2026-07-22  8:01         ` Daniel Turull
  0 siblings, 1 reply; 9+ messages in thread
From: Yoann Congal @ 2026-07-22  7:57 UTC (permalink / raw)
  To: daniel.turull, patchtest@automation.yoctoproject.org
  Cc: openembedded-core@lists.openembedded.org

Hello,

On Wed Jul 22, 2026 at 9:08 AM CEST, Daniel Turull via lists.openembedded.org wrote:
> On Tue, 2026-07-21 at 15:02 +0000, Patchtest via lists.openembedded.org
> wrote:
>> Thank you for your submission. Patchtest identified one
>> or more issues with the patch. Please see the log below for
>> more information:
>> 
>> ---
>> Testing patch /home/patchtest/share/mboxes/2-4-Add-tag-in-SRC_URI-in-
>> multiple-recipes.patch
>> 
>> FAIL: test shortlog format: Commit shortlog (first line of commit
>> message) should follow the format "<target>: <summary>"
>> (test_mbox.TestMbox.test_shortlog_format)
>
> The patch affects multiple recipes, so I don't know which target it
> should be.


FYI, those global patches are often tagged "meta:"
For example: meta: Support opting out of any machine features
https://git.openembedded.org/openembedded-core/commit/?id=3194d6868dd14e40ae670db089e5bf6f862d3044

Regards,
-- 
Yoann Congal
Smile ECS



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [OE-core] Patchtest results for [PATCH 2/4] Add tag in SRC_URI in multiple recipes
  2026-07-22  7:57       ` Yoann Congal
@ 2026-07-22  8:01         ` Daniel Turull
  0 siblings, 0 replies; 9+ messages in thread
From: Daniel Turull @ 2026-07-22  8:01 UTC (permalink / raw)
  To: patchtest@automation.yoctoproject.org, yoann.congal@smile.fr
  Cc: openembedded-core@lists.openembedded.org

On Wed, 2026-07-22 at 09:57 +0200, Yoann Congal wrote:
> Hello,
>
> On Wed Jul 22, 2026 at 9:08 AM CEST, Daniel Turull via
> lists.openembedded.org wrote:
> > On Tue, 2026-07-21 at 15:02 +0000, Patchtest via
> > lists.openembedded.org
> > wrote:
> > > Thank you for your submission. Patchtest identified one
> > > or more issues with the patch. Please see the log below for
> > > more information:
> > >
> > > ---
> > > Testing patch /home/patchtest/share/mboxes/2-4-Add-tag-in-
> > > SRC_URI-in-
> > > multiple-recipes.patch
> > >
> > > FAIL: test shortlog format: Commit shortlog (first line of commit
> > > message) should follow the format "<target>: <summary>"
> > > (test_mbox.TestMbox.test_shortlog_format)
> >
> > The patch affects multiple recipes, so I don't know which target it
> > should be.
>
>
> FYI, those global patches are often tagged "meta:"
> For example: meta: Support opting out of any machine features
> https://git.openembedded.org/openembedded-core/commit/?id=3194d6868dd14e40ae670db089e5bf6f862d3044
>
> Regards,

Thanks Yoann, I'll resend a v2 with meta:

> --
> Yoann Congal
> Smile ECS


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-07-22  8:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-21 14:48 [PATCH 0/4] Add missing tag parameter in git SRC_URI daniel.turull
2026-07-21 14:48 ` [PATCH 1/4] scripts/contrib: add helper to report and fix missing SRC_URI ;tag= daniel.turull
2026-07-21 14:48 ` [PATCH 2/4] Add tag in SRC_URI in multiple recipes daniel.turull
2026-07-21 15:02   ` Patchtest results for " patchtest
2026-07-22  7:08     ` [OE-core] " Daniel Turull
2026-07-22  7:57       ` Yoann Congal
2026-07-22  8:01         ` Daniel Turull
2026-07-21 14:48 ` [PATCH 3/4] cryptodev-linux: add +git to version daniel.turull
2026-07-21 14:48 ` [PATCH 4/4] xmlto: correct srcrev to point to released version daniel.turull

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox