From patchwork Thu Jun 14 21:44:03 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [bitbake-devel,v2,2/3] fetch2: Allow local git trees as pre-mirrors Date: Thu, 14 Jun 2012 21:44:03 -0000 From: Jason Wessel X-Patchwork-Id: 29901 Message-Id: <1339710244-6755-3-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. Today the git.py implements a mirrortarball check within the base fetch2 class. If the check is moved into the git.py additional checking can be done for a "file://..." url to look for a local git archive and then fall back to the mirrortarball. Signed-off-by: Jason Wessel --- lib/bb/fetch2/__init__.py | 5 ++++- lib/bb/fetch2/git.py | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 324eef2..1bd4ee4 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -201,7 +201,9 @@ def uri_replace(ud, uri_find, uri_replace, d): result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc]) if uri_find_decoded.index(i) == 2: basename = None - if ud.mirrortarball: + if ud.mirrorcheck: + basename = ud.mirrorcheck.getbasename(ud, result_decoded[0], result_decoded[loc]) + elif ud.mirrortarball: basename = os.path.basename(ud.mirrortarball) elif ud.localpath: basename = os.path.basename(ud.localpath) @@ -648,6 +650,7 @@ class FetchData(object): self.localpath = None self.lockfile = None self.mirrortarball = None + self.mirrorcheck = None self.basename = None (self.type, self.host, self.path, self.user, self.pswd, self.parm) = decodeurl(data.expand(url, d)) self.date = self.getSRCDate(d) diff --git a/lib/bb/fetch2/git.py b/lib/bb/fetch2/git.py index 07d722a..f34a1e8 100644 --- a/lib/bb/fetch2/git.py +++ b/lib/bb/fetch2/git.py @@ -138,13 +138,23 @@ class Git(FetchMethod): if ud.rebaseable: for name in ud.names: gitsrcname = gitsrcname + '_' + ud.revisions[name] + ud.mirrorcheck = self + 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 + def getbasename(self, ud, proto, location): + # First check if there is a local git archive else return the + # mirrortarball name. + if proto == "file" and os.path.exists(os.path.join(location, ud.mirror, "objects")): + return ud.mirror + return os.path.basename(ud.mirrortarball) + def localpath(self, url, ud, d): return ud.clonedir @@ -166,6 +176,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):