gitpkgv.bbclass: inspect repository in UNPACKDIR

When BB_GIT_SHALLOW = "1" is used, the unpacked gir repository doesn't
exist in the download folder, and the class isn't able to inspect the
details of the repository.

Instead inspect the repository it the UNPACKDIR.

Beside this, since BitBake fetcher performs an actual initial shallow
clone of the repository when this feature is enabled, it is not possible
to determine the exact number of commits. Add a warning about this.

Reported-by: WXbet <WXbet@proton.me>
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
Gyorgy Sarvari
2025-08-18 07:18:22 +02:00
committed by Khem Raj
parent 5ae3536204
commit 157d2fede2
+20 -5
View File
@@ -21,6 +21,11 @@
# v1.2, xtest, v2.0" will force you to increment PE to get upgradeable # v1.2, xtest, v2.0" will force you to increment PE to get upgradeable
# path to v2.0 revisions # path to v2.0 revisions
# #
# Another WARNING: Since Walnascar release BB_SHALLOW_GIT will actually
# perform a shallow initial checkout, which makes it impossible to determine
# the correct number of commits in the repository - thus using this class
# is not recommended when shallow cloning is enabled.
#
# use example: # use example:
# #
# inherit gitpkgv # inherit gitpkgv
@@ -59,6 +64,9 @@ def get_git_pkgv(d, use_tags):
from shlex import quote from shlex import quote
src_uri = d.getVar('SRC_URI').split() src_uri = d.getVar('SRC_URI').split()
unpackdir = d.getVar('UNPACKDIR')
def_destsuffix = (d.getVar("BB_GIT_DEFAULT_DESTSUFFIX") or "git") + "/"
fetcher = bb.fetch2.Fetch(src_uri, d) fetcher = bb.fetch2.Fetch(src_uri, d)
ud = fetcher.ud ud = fetcher.ud
@@ -78,20 +86,27 @@ def get_git_pkgv(d, use_tags):
found = False found = False
for url in ud.values(): for url in ud.values():
if url.type == 'git' or url.type == 'gitsm': if url.type == 'git' or url.type == 'gitsm':
if not os.path.exists(url.localpath): destsuffix = url.parm.get("destsuffix", def_destsuffix)
subdir = url.parm.get('subdir', '')
destdir = os.path.join(unpackdir, destsuffix, subdir)
if not os.path.exists(destdir):
return None return None
if d.getVar('BB_GIT_SHALLOW') == '1':
bb.warnonce('%s: Shallow cloning enabled - gitpkgv.bbclass will not generate sortable versions' % d.getVar('PN'))
found = True found = True
vars = { 'repodir' : quote(url.localpath), vars = { 'repodir' : quote(destdir),
'rev' : quote(url.revision) } 'rev' : quote(url.revision) }
rev = bb.fetch2.get_srcrev(d).split('+')[1] rev = bb.fetch2.get_srcrev(d).split('+')[1]
rev_file = os.path.join(url.localpath, "oe-gitpkgv_" + url.revision) rev_file = os.path.join(destdir, "oe-gitpkgv_" + url.revision)
if not os.path.exists(rev_file) or os.path.getsize(rev_file)==0: if not os.path.exists(rev_file) or os.path.getsize(rev_file)==0:
commits = bb.fetch2.runfetchcmd( commits = bb.fetch2.runfetchcmd(
"git --git-dir=%(repodir)s rev-list %(rev)s -- 2>/dev/null | wc -l" "git -C %(repodir)s rev-list %(rev)s -- 2>/dev/null | wc -l"
% vars, d, quiet=True).strip().lstrip('0') % vars, d, quiet=True).strip().lstrip('0')
if commits != "": if commits != "":
@@ -107,7 +122,7 @@ def get_git_pkgv(d, use_tags):
if use_tags: if use_tags:
try: try:
output = bb.fetch2.runfetchcmd( output = bb.fetch2.runfetchcmd(
"git --git-dir=%(repodir)s describe %(rev)s --tags --exact-match 2>/dev/null" "git -C %(repodir)s describe %(rev)s --tags --exact-match 2>/dev/null"
% vars, d, quiet=True).strip() % vars, d, quiet=True).strip()
ver = gitpkgv_drop_tag_prefix(d, output) ver = gitpkgv_drop_tag_prefix(d, output)
except Exception: except Exception: