From 408fd37529a1f1c6e21a9ee1969d4b625188f7fd Mon Sep 17 00:00:00 2001 From: Bruce Ashfield Date: Thu, 23 Feb 2012 16:08:42 -0500 Subject: fetch2/git: create bareclone option For similar reasons as the nocheckout option, packages that need enhanced control over the checkout and branch creation on a repository may want a complete mirror/bareclone created of the repository when performing the unpack. This is useful/required when a local respository is being used, but local tracking branches have not been created for all branches that a given recipe needs to manipulate. The standard git clone operations will create remote branches for the branches that are local to the source repository, but branches that are remote do not translate to the destination repository. Doing a mirror/bare clone of the source, makes all branches available to the repository. This is a particular use case, but the ability to do a bare clone creates great flexibility in recipe space, with no impact to recipes that don't need this functionality. To implement this, a new option 'bareclone' is craeted which creates a mirror copy of the repository and leaves it bare in the unpacking phase. A recipe that uses this option must both checkout and debare the repository itself. (Bitbake rev: 82482aae6f311c994275fb0b6b32d954bbfc78c3) Signed-off-by: Bruce Ashfield Signed-off-by: Richard Purdie --- bitbake/lib/bb/fetch2/git.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index fb0260a42a..4e46ec8f30 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py @@ -38,6 +38,12 @@ Supported SRC_URI options are: who has its own routine to checkout code. The default is "0", set nocheckout=1 if needed. +- bareclone + Create a bare clone of the source code and don't checkout the source code + when unpacking. Set this option for the recipe who has its own routine to + checkout code and tracking branch requirements. + The default is "0", set bareclone=1 if needed. + """ #Copyright (C) 2005 Richard Purdie @@ -95,6 +101,11 @@ class Git(FetchMethod): ud.rebaseable = ud.parm.get("rebaseable","0") == "1" + # bareclone implies nocheckout + ud.bareclone = ud.parm.get("bareclone","0") == "1" + if ud.bareclone: + ud.nocheckout = 1 + branches = ud.parm.get("branch", "master").split(',') if len(branches) != len(ud.names): raise bb.fetch2.ParameterError("The number of name and branch parameters is not balanced", ud.url) @@ -220,7 +231,11 @@ class Git(FetchMethod): if os.path.exists(destdir): bb.utils.prunedir(destdir) - runfetchcmd("git clone -s -n %s/ %s" % (ud.clonedir, destdir), d) + cloneflags = "-s -n" + if ud.bareclone: + cloneflags += " --mirror" + + runfetchcmd("git clone %s %s/ %s" % (cloneflags, ud.clonedir, destdir), d) if not ud.nocheckout: os.chdir(destdir) if subdir != "": -- cgit v1.2.3-54-g00ecf