From patchwork Thu Jun 14 03:09:40 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [bitbake-devel,3/4] fetch2: Allow local git trees as pre-mirrors Date: Thu, 14 Jun 2012 03:09:40 -0000 From: Jason Wessel X-Patchwork-Id: 29799 Message-Id: <1339643381-23026-4-git-send-email-jason.wessel@windriver.com> To: There is a strong desire to store the raw git trees in a pre-mirror such that they can easily get updated externally as well as to contain local branches. This patch adds another type of pre-mirror rule that is "git" based. The syntax looks like: PREMIRRORS_append := "\ git://.*/.* git://${LAYERDIR}/downloads/git/ \n" The syntax for typical tar.gz compressed git tree is: PREMIRRORS_append := "\ git://.*/.* file://${LAYERDIR}/downloads/git/ \n" The new pre-mirror type also requires the creation of the GITDIR at the pre-mirror check time or the git clone and git checks will fail with obscure errors. Signed-off-by: Jason Wessel --- lib/bb/fetch2/__init__.py | 8 +++++++- lib/bb/fetch2/git.py | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 324eef2..68025a3 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -202,7 +202,13 @@ def uri_replace(ud, uri_find, uri_replace, d): if uri_find_decoded.index(i) == 2: basename = None if ud.mirrortarball: - basename = os.path.basename(ud.mirrortarball) + # Transpose a git uri to a file uri and check if there + # is a local mirror durring the premirror checks + if ud.mirror and uri_find_decoded[0] == "git": + result_decoded[0] = "file" + basename = os.path.basename(ud.mirror) + else: + basename = os.path.basename(ud.mirrortarball) elif ud.localpath: basename = os.path.basename(ud.localpath) if basename and result_decoded[loc].endswith("/"): diff --git a/lib/bb/fetch2/git.py b/lib/bb/fetch2/git.py index ecc5e0d..1ad9213 100644 --- a/lib/bb/fetch2/git.py +++ b/lib/bb/fetch2/git.py @@ -138,9 +138,11 @@ class Git(FetchMethod): if ud.rebaseable: for name in ud.names: gitsrcname = gitsrcname + '_' + ud.revisions[name] + ud.mirror = gitsrcname ud.mirrortarball = 'git2_%s.tar.gz' % (gitsrcname) ud.fullmirror = os.path.join(d.getVar("DL_DIR", True), ud.mirrortarball) gitdir = d.getVar("GITDIR", True) or (d.getVar("DL_DIR", True) + "/git2/") + ud.gitdir = gitdir ud.clonedir = os.path.join(gitdir, gitsrcname) ud.localfile = ud.clonedir @@ -166,6 +168,8 @@ class Git(FetchMethod): return True if os.path.exists(ud.clonedir): return False + if not os.path.exists(ud.gitdir): + bb.utils.mkdirhier(ud.gitdir) return True def download(self, loc, ud, d):