Patchwork [bitbake-devel,v2,2/3] fetch2: Allow local git trees as pre-mirrors

login
register
mail settings
Submitter Jason Wessel
Date June 14, 2012, 9:44 p.m.
Message ID <1339710244-6755-3-git-send-email-jason.wessel@windriver.com>
Download mbox | patch
Permalink /patch/29901/
State New
Headers show

Comments

Jason Wessel - June 14, 2012, 9:44 p.m.
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 <jason.wessel@windriver.com>
---
 lib/bb/fetch2/__init__.py |    5 ++++-
 lib/bb/fetch2/git.py      |   12 ++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

Patch

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):