bitbake: fetch/gitsm: Store the original url data to fix relative gitsm paths

If the gitsm:// url contains a git submodule with a relative "../" path
and the fetcher is configured to use a premirror, it will fail as the
host name encoded in the original url is lost and the correct paths
can't be found.

Save the original url data in the new data so that it can be consulted to
fix this kind of edge case.

The test case change that follows this provides a test of this functionality.

(Bitbake rev: ecfde933b848b5120858b922236f57238a6e1fed)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 58872250f72f5760b4126552bdec5497f5a1a1f4)
Signed-off-by: Yoann Congal <yoann.congal@smile.fr>
Signed-off-by: Paul Barker <paul@pbarker.dev>
This commit is contained in:
Richard Purdie
2026-09-07 14:05:23 +01:00
committed by Paul Barker
parent 95fe1c602d
commit 1ac52be1e6
2 changed files with 5 additions and 1 deletions

View File

@@ -1011,6 +1011,7 @@ def build_mirroruris(origud, mirrors, ld):
newud = FetchData(newuri, ld)
newud.ignore_checksums = True
newud.setup_localpath(ld)
newud.origud = ud
except bb.fetch2.BBFetchException as e:
logger.debug("Mirror fetch failure for url %s (original url: %s)" % (newuri, origud.url))
logger.debug(str(e))

View File

@@ -89,7 +89,10 @@ class GitSM(Git):
# Convert relative to absolute uri based on parent uri
if uris[m].startswith('..') or uris[m].startswith('./'):
newud = copy.copy(ud)
if hasattr(ud, "origud"):
newud = copy.copy(ud.origud)
else:
newud = copy.copy(ud)
newud.path = os.path.normpath(os.path.join(newud.path, uris[m]))
uris[m] = Git._get_repo_url(self, newud)