Currently there is no way to avoid the "--mirror" argument when doing an initial clone. This is problematic in that there are now a significant number of repos out there for which we want the content, but creating a full mirror clone isn't practical or efficient.
The two most common examples are: 1) Repos that have "ingested" another repo with no common ancestors - we see this in "stable-queue" and "linux-rt-devel" repos[1] which started as repos of queued format-patch output, but then also added the baseline so the patches could be obtained "pre-applied" for easier automated testing. Obviously, ingesting all of the linux history grows a repo by gigabytes. 2) Repos that have gone forward in time in a direction we don't care about, say for example a flag day event, where everything was rewritten from C into rust in one massive commit, or where a merge of a giant wad of orthogonal history and/or binary/proprietary content "pollutes" the repo. In both cases, we can solve the problem by using "--single-branch" optionally in conjunction with "--branch <goodstuff>" in order to limit the cloned content to a specific branch or tag. We will only get content up to that point, and any commits/ancestors leading up to that point. The clone is fully functional and without any of the limitatons imposed by shallow clones. So, in case #1 we simply choose the branch we want - raw unapplied content, or applied and tagged (and perhaps signed) - but we aren't subjected to downloading both branches. In case #2 we simply specify the last known "good" tag before the upstream went off in a direction that we don't care about. Note that default behaviour is unchanged - so this is an opt-in feature which won't impact any existing recipes. We also leave the door open for it being URL specific via <name> since we know we have multi repo SRC_URI in recipes-kernel already. [1] git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git Signed-off-by: Paul Gortmaker <paul.gortma...@windriver.com> --- bitbake/lib/bb/fetch2/git.py | 3 ++- documentation/ref-manual/variables.rst | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index e3ba80a3f52a..22281e2cfb98 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py @@ -345,10 +345,11 @@ class Git(FetchMethod): # If the repo still doesn't exist, fallback to cloning it if not os.path.exists(ud.clonedir): + extcloneargs = d.getVar('GITCLONEARGS_' + ud.names[0]) or d.getVar('GITCLONEARGS') or "--bare --mirror" # We do this since git will use a "-l" option automatically for local urls where possible if repourl.startswith("file://"): repourl = repourl[7:] - clone_cmd = "LANG=C %s clone --bare --mirror %s %s --progress" % (ud.basecmd, shlex.quote(repourl), ud.clonedir) + clone_cmd = "LANG=C %s clone %s %s %s --progress" % (ud.basecmd, extcloneargs, shlex.quote(repourl), ud.clonedir) if ud.proto.lower() != 'file': bb.fetch2.check_network_access(d, clone_cmd, ud.url) progresshandler = GitProgressHandler(d) diff --git a/documentation/ref-manual/variables.rst b/documentation/ref-manual/variables.rst index 0310429bdcab..cd2b77604e87 100644 --- a/documentation/ref-manual/variables.rst +++ b/documentation/ref-manual/variables.rst @@ -2649,6 +2649,14 @@ system and gives an overview of their function and contents. :term:`GDB` The minimal command and arguments to run the GNU Debugger. + :term:`GITCLONEARGS` + The arguments used to "git clone" when cloning a repo from an + an external server into the local download area. The default is + "--bare --mirror". Use of "--bare --single-branch --branch foo" + will limit what is cloned/downloaded just to the branch/tag "foo". + An URL specific GITCLONEARGS_<name> will take precedence over a + recipe wide GITCLONEARGS setting, if both are present. + :term:`GITDIR` The directory in which a local copy of a Git repository is stored when it is cloned. -- 2.25.1
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#9636): https://lists.yoctoproject.org/g/linux-yocto/message/9636 Mute This Topic: https://lists.yoctoproject.org/mt/81808151/21656 Group Owner: linux-yocto+ow...@lists.yoctoproject.org Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-