[bitbake-devel] [PATCH] bb.fetch.git: add a way to avoid git protocol, and force http or https mirrors
fabien.proriolpatch at kazoe.org
fabien.proriolpatch at kazoe.org
Tue May 31 13:18:04 UTC 2016
From: Fabien Proriol <fabien.proriol at 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 at 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
More information about the bitbake-devel
mailing list