* [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