]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake: Sync git fetcher with changes upstream
authorRichard Purdie <rpurdie@linux.intel.com>
Mon, 11 May 2009 21:34:07 +0000 (22:34 +0100)
committerRichard Purdie <rpurdie@linux.intel.com>
Mon, 11 May 2009 21:34:07 +0000 (22:34 +0100)
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake/lib/bb/fetch/git.py

index 010a4f57a25ea404e8132011ab6b16e3b8b28897..4cae1c1879e63b9d52155cd668501e8921d33893 100644 (file)
@@ -37,9 +37,12 @@ class Git(Fetch):
 
     def localpath(self, url, ud, d):
 
-        ud.proto = "rsync"
         if 'protocol' in ud.parm:
             ud.proto = ud.parm['protocol']
+        elif not ud.host:
+            ud.proto = 'file'
+        else:
+            ud.proto = "rsync"
 
         ud.branch = ud.parm.get("branch", "master")
 
@@ -49,12 +52,9 @@ class Git(Fetch):
         elif tag:
             ud.tag = tag
 
-        if not ud.tag:
+        if not ud.tag or ud.tag == "master":
             ud.tag = self.latest_revision(url, ud, d)  
 
-        if ud.tag == "master":
-            ud.tag = self.latest_revision(url, ud, d)
-
         ud.localfile = data.expand('git_%s%s_%s.tar.gz' % (ud.host, ud.path.replace('/', '.'), ud.tag), d)
 
         return os.path.join(data.getVar("DL_DIR", d, True), ud.localfile)
@@ -90,11 +90,12 @@ class Git(Fetch):
 
         os.chdir(repodir)
         # Remove all but the .git directory
-        runfetchcmd("rm * -Rf", d)
-        runfetchcmd("git fetch %s://%s%s%s %s" % (ud.proto, username, ud.host, ud.path, ud.branch), d)
-        runfetchcmd("git fetch --tags %s://%s%s%s" % (ud.proto, username, ud.host, ud.path), d)
-        runfetchcmd("git prune-packed", d)
-        runfetchcmd("git pack-redundant --all | xargs -r rm", d)
+        if not self._contains_ref(ud.tag, d):
+            runfetchcmd("rm * -Rf", d)
+            runfetchcmd("git fetch %s://%s%s%s %s" % (ud.proto, username, ud.host, ud.path, ud.branch), d)
+            runfetchcmd("git fetch --tags %s://%s%s%s" % (ud.proto, username, ud.host, ud.path), d)
+            runfetchcmd("git prune-packed", d)
+            runfetchcmd("git pack-redundant --all | xargs -r rm", d)
 
         os.chdir(repodir)
         mirror_tarballs = data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True)
@@ -120,6 +121,10 @@ class Git(Fetch):
     def suppports_srcrev(self):
         return True
 
+    def _contains_ref(self, tag, d):
+        output = runfetchcmd("git log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % tag, d, quiet=True)
+        return output.split()[0] != "0"
+
     def _revision_key(self, url, ud, d):
         """
         Return a unique key for the url