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 <[email protected]>
---
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: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-