All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] bb.fetch.git: add a way to avoid git protocol, and force http or https mirrors
@ 2016-05-31 13:18 fabien.proriolpatch
  2016-05-31 13:39 ` Olof Johansson
  2016-05-31 13:50 ` Richard Purdie
  0 siblings, 2 replies; 8+ messages in thread
From: fabien.proriolpatch @ 2016-05-31 13:18 UTC (permalink / raw)
  To: bitbake-devel; +Cc: Fabien Proriol, rpurdie

From: Fabien Proriol <fabien.proriol@jdsu.com>

This patch add the possibility to bitbake to avoid git protocol to fetch sources.
This is usefull in some network with firewall blocking git port.

When BB_GIT_PROTOCOL_FIREWALL is set, the PROTOCOL_MIRRORS table is used to find the new protocol (http or https) and the new host (if different) to used.

BB_GIT_PROTOCOL_FIREWALL can also contains a list of host accepted. This is usefull for exemple, if we use local git repository inside the network.

Exemple usage:
    # Avoid all git protocol
    BB_GIT_PROTOCOL_FIREWALL = "1"

    # Avoid git protocol, except for srv1 and srv2 in local network
    BB_GIT_PROTOCOL_FIREWALL = "srv1.mydomain.com;srv2.mydomain.com"

Signed-off-by: Fabien Proriol <fabien.proriol@jdsu.com>
---
 bitbake/lib/bb/fetch2/git.py | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 526668b..27dde60 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -76,6 +76,20 @@ from   bb.fetch2 import FetchMethod
 from   bb.fetch2 import runfetchcmd
 from   bb.fetch2 import logger
 
+PROTOCOL_MIRRORS = {
+    "sourceware.org": {"protocol":"http"},
+    "github.com": {"protocol":"https"},
+    "git.sv.gnu.org": {"protocol":"https", "host":"git.savannah.gnu.org/r"},
+    "anongit.freedesktop.org": {"protocol":"http"},
+    "anonscm.debian.org": {"protocol":"https", "host":"anonscm.debian.org/git"},
+    "git.gnome.org": {"protocol":"https", "host":"git.gnome.org/browse"},
+    "git.yoctoproject.org": {"protocol":"http", "host":"git.yoctoproject.org/git"},
+    "git.kernel.org": {"protocol":"https"},
+    "git.denx.de": {"protocol":"http"},
+    "git.lttng.org": {"protocol":"http"},
+    "git.infradead.org":  {"protocol":"https", "host":"github.com/eva-oss"},
+}
+
 class Git(FetchMethod):
     """Class to fetch a module or modules from git repositories"""
     def init(self, d):
@@ -102,6 +116,12 @@ class Git(FetchMethod):
         else:
             ud.proto = "git"
 
+        firewall = d.getVar("BB_GIT_PROTOCOL_FIREWALL", True)
+        if firewall:
+            self.git_firewall = firewall.split(";")
+        else:
+            self.git_firewall = None
+
         if not ud.proto in ('git', 'file', 'ssh', 'http', 'https', 'rsync'):
             raise bb.fetch2.ParameterError("Invalid protocol type", ud.url)
 
@@ -315,6 +335,16 @@ class Git(FetchMethod):
             username = ud.user + '@'
         else:
             username = ""
+
+        if (ud.proto == "git") and (self.git_firewall):
+            if not ud.host in self.git_firewall:
+                if ud.host.strip() in PROTOCOL_MIRRORS.keys():
+                    ud.proto = PROTOCOL_MIRRORS[ud.host]["protocol"]
+                    if "host" in PROTOCOL_MIRRORS[ud.host].keys():
+                        ud.host = PROTOCOL_MIRRORS[ud.host]["host"]
+                else:
+                    raise bb.fetch2.FetchError("Unknown protocol mirror for %s (%s)" % (ud.host.strip(), ud.path))
+
         return "%s://%s%s%s" % (ud.proto, username, ud.host, ud.path)
 
     def _revision_key(self, ud, d, name):
-- 
2.7.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-07-26 12:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-31 13:18 [PATCH] bb.fetch.git: add a way to avoid git protocol, and force http or https mirrors fabien.proriolpatch
2016-05-31 13:39 ` Olof Johansson
2016-05-31 13:50 ` Richard Purdie
2017-07-24 21:04   ` Andre McCurdy
2017-07-25 14:43     ` Mark Hatle
2017-07-25 19:30       ` Andre McCurdy
2017-07-25 22:19         ` Richard Purdie
2017-07-26 12:58         ` Mark Hatle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.