summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2023-02-07 05:09:54 -1000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-02-13 07:48:16 +0000
commit6b4ee014f3e47aae69e86bff73757dd720ae692b (patch)
treebb90a2a29f46e38ac1c1cee940e550ab6950bc80 /bitbake
parenta99017d705b08f95763aebe94b44045164dc90b2 (diff)
downloadpoky-6b4ee014f3e47aae69e86bff73757dd720ae692b.tar.gz
bitbake: fetch2/git: Prevent git fetcher from fetching gitlab repository metadata
The bitbake git fetcher currently fetches 'refs/*:refs/*', i.e. every single object in the remote repository. This works poorly with gitlab and github, which use the remote git repository to track its metadata like merge requests, CI pipelines and such. Specifically, gitlab generates refs/merge-requests/*, refs/pipelines/* and refs/keep-around/* and they all contain massive amount of data that are useless for the bitbake build purposes. The amount of useless data can in fact be so massive (e.g. with FDO mesa.git repository) that some proxies may outright terminate the 'git fetch' connection, and make it appear as if bitbake got stuck on 'git fetch' with no output. To avoid fetching all these useless metadata, tweak the git fetcher such that it only fetches refs/heads/* and refs/tags/* . Avoid using negative refspecs as those are only available in new git versions. Per feedback on the ML, Gerrit may push commits outsides of branches or tags during CI runs, which currently works with the 'nobranch=1' fetcher parameter. To retain this functionality, keep fetching everything in case the 'nobranch=1' is present. This still avoids fetching massive amount of data in the common case, since 'nobranch=1' is rare. Update 'nobranch' documentation. Reviewed-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> (Bitbake rev: efb2903e6c94a5c884485ecb91f1fca7e8ee18f1) Signed-off-by: Marek Vasut <marex@denx.de> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> (cherry picked from commit d32e5b0ec2ab85ffad7e56ac5b3160860b732556) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst4
-rw-r--r--bitbake/lib/bb/fetch2/git.py8
2 files changed, 8 insertions, 4 deletions
diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst
index 93ac18b78a..37c7bcc8e0 100644
--- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst
+++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst
@@ -405,8 +405,8 @@ This fetcher supports the following parameters:
405 405
406- *"nobranch":* Tells the fetcher to not check the SHA validation for 406- *"nobranch":* Tells the fetcher to not check the SHA validation for
407 the branch when set to "1". The default is "0". Set this option for 407 the branch when set to "1". The default is "0". Set this option for
408 the recipe that refers to the commit that is valid for a tag instead 408 the recipe that refers to the commit that is valid for a any namespace
409 of the branch. 409 instead of the branch.
410 410
411- *"bareclone":* Tells the fetcher to clone a bare clone into the 411- *"bareclone":* Tells the fetcher to clone a bare clone into the
412 destination directory without checking out a working tree. Only the 412 destination directory without checking out a working tree. Only the
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 2868aa5d53..b8e00ced3c 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -44,7 +44,7 @@ Supported SRC_URI options are:
44 44
45- nobranch 45- nobranch
46 Don't check the SHA validation for branch. set this option for the recipe 46 Don't check the SHA validation for branch. set this option for the recipe
47 referring to commit which is valid in tag instead of branch. 47 referring to commit which is valid in any namespace instead of branch.
48 The default is "0", set nobranch=1 if needed. 48 The default is "0", set nobranch=1 if needed.
49 49
50- usehead 50- usehead
@@ -366,7 +366,11 @@ class Git(FetchMethod):
366 runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir) 366 runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir)
367 367
368 runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=ud.clonedir) 368 runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=ud.clonedir)
369 fetch_cmd = "LANG=C %s fetch -f --progress %s refs/*:refs/*" % (ud.basecmd, shlex.quote(repourl)) 369
370 if ud.nobranch:
371 fetch_cmd = "LANG=C %s fetch -f --progress %s refs/*:refs/*" % (ud.basecmd, shlex.quote(repourl))
372 else:
373 fetch_cmd = "LANG=C %s fetch -f --progress %s refs/heads/*:refs/heads/* refs/tags/*:refs/tags/*" % (ud.basecmd, shlex.quote(repourl))
370 if ud.proto.lower() != 'file': 374 if ud.proto.lower() != 'file':
371 bb.fetch2.check_network_access(d, fetch_cmd, ud.url) 375 bb.fetch2.check_network_access(d, fetch_cmd, ud.url)
372 progresshandler = GitProgressHandler(d) 376 progresshandler = GitProgressHandler(d)