Patchwork [1/1] sanity.bbclass: check the format of MIRRORS

login
register
mail settings
Submitter Robert Yang
Date Aug. 22, 2014, 8:31 a.m.
Message ID <2df065ff7652c0c8247a3a073e75a33bb6b6a2f7.1408695516.git.liezhi.yang@windriver.com>
Download mbox | patch
Permalink /patch/78795/
State Accepted
Commit 0ae7b58060f1ee7914dd45d462e48d4b8a3751ad
Headers show

Comments

Robert Yang - Aug. 22, 2014, 8:31 a.m.
Check the format of MIRRORS, PREMIRRORS and SSTATE_MIRRORS:
* Each mirror shoudl contain two memebers.
* The local "file://" url must use absolute path (file:///).
* The protocol must in protocols list.

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
 meta/classes/sanity.bbclass |   33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

Patch

diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index b5fab6a..5b019b1 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -754,6 +754,39 @@  def check_sanity_everybuild(status, d):
     if oeroot.find(' ') != -1:
         status.addresult("Error, you have a space in your COREBASE directory path. Please move the installation to a directory which doesn't include a space since autotools doesn't support this.")
 
+    # Check the format of MIRRORS, PREMIRRORS and SSTATE_MIRRORS
+    mir_types = ['MIRRORS', 'PREMIRRORS', 'SSTATE_MIRRORS']
+    protocols = ['http://', 'ftp://', 'file://', 'https://', 'https?$://', \
+        'git://', 'gitsm://', 'hg://', 'osc://', 'p4://', 'svk://', 'svn://', \
+        'bzr://', 'cvs://']
+    for mir_type in mir_types:
+        mirros = (d.getVar(mir_type, True) or '').split('\\n')
+        for mir in mirros:
+            mir_list = mir.split()
+            # Should be two members.
+            if len(mir_list) not in [0, 2]:
+                bb.warn('Invalid %s: %s, should be 2 members, but found %s.' \
+                    % (mir_type, mir.strip(), len(mir_list)))
+            elif len(mir_list) == 2:
+                # Each member should start with protocols
+                valid_protocol_0 = False
+                valid_protocol_1 = False
+                file_absolute = True
+                for protocol in protocols:
+                    if not valid_protocol_0 and mir_list[0].startswith(protocol):
+                        valid_protocol_0 = True
+                    if not valid_protocol_1 and mir_list[1].startswith(protocol):
+                        valid_protocol_1 = True
+                        # The file:// must be an absolute path.
+                        if protocol == 'file://' and not mir_list[1].startswith('file:///'):
+                            file_absolute = False
+                    if valid_protocol_0 and valid_protocol_1:
+                        break
+                if not (valid_protocol_0 and valid_protocol_1):
+                    bb.warn('Invalid protocol in %s: %s' % (mir_type, mir.strip()))
+                if not file_absolute:
+                    bb.warn('Invalid file url in %s: %s, must be absolute path (file:///)' % (mir_type, mir.strip()))
+
     # Check that TMPDIR hasn't changed location since the last time we were run
     tmpdir = d.getVar('TMPDIR', True)
     checkfile = os.path.join(tmpdir, "saved_tmpdir")