]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake/fetch: Spell out which fetcher backends support and recommend checksums
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 15 May 2012 19:49:36 +0000 (19:49 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sun, 20 May 2012 08:24:23 +0000 (09:24 +0100)
There were some hardcoded behaviours in the system for which backends
support checksums verses which backends recommend them verses which
don't recommend them.

This moves the functionality into specific fetchers and then makes the
general code generic. This cleans up the codebase and fixes some corner
cases such as trying to checksum directories returned by the git fetcher.

(Bitbake rev: ef6d268f7b8527541a7fb044cf95a973be4097f4)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/bb/fetch2/__init__.py
bitbake/lib/bb/fetch2/git.py
bitbake/lib/bb/fetch2/ssh.py
bitbake/lib/bb/fetch2/wget.py

index f629c01cdb97c538e53c99817007c53f1604be96..98645956fb86fa06fd4ef99b96bd4546c5b9d4ef 100644 (file)
@@ -271,10 +271,13 @@ def verify_checksum(u, ud, d):
     matched
     """
 
+    if not ud.method.supports_checksum(ud):
+        return
+
     md5data = bb.utils.md5_file(ud.localpath)
     sha256data = bb.utils.sha256_file(ud.localpath)
 
-    if ud.type in ["http", "https", "ftp", "ftps"]:
+    if ud.method.recommends_checksum(ud):
         # If strict checking enabled and neither sum defined, raise error
         strict = d.getVar("BB_STRICT_CHECKSUM", True) or None
         if (strict and ud.md5_expected == None and ud.sha256_expected == None):
@@ -578,10 +581,14 @@ class FetchData(object):
             self.sha256_name = "sha256sum"
         if self.md5_name in self.parm:
             self.md5_expected = self.parm[self.md5_name]
+        elif self.type not in ["http", "https", "ftp", "ftps"]:
+            self.md5_expected = None
         else:
             self.md5_expected = d.getVarFlag("SRC_URI", self.md5_name)
         if self.sha256_name in self.parm:
             self.sha256_expected = self.parm[self.sha256_name]
+        elif self.type not in ["http", "https", "ftp", "ftps"]:
+            self.sha256_expected = None
         else:
             self.sha256_expected = d.getVarFlag("SRC_URI", self.sha256_name)
 
@@ -660,6 +667,19 @@ class FetchMethod(object):
         """
         return os.path.join(data.getVar("DL_DIR", d, True), urldata.localfile)
 
+    def supports_checksum(self, urldata):
+        """
+        Is localpath something that can be represented by a checksum?
+        """
+        return True
+
+    def recommends_checksum(self, urldata):
+        """
+        Is the backend on where checksumming is recommended (should warnings 
+        by displayed if there is no checksum)?
+        """
+        return False
+
     def _strip_leading_slashes(self, relpath):
         """
         Remove leading slash as os.path.join can't cope
index 962cc0a4846d8822b37d10a1eb524675b7d00e33..ecc5e0ded82748eaf8f110c3d1e900ec8fad6424 100644 (file)
@@ -82,6 +82,9 @@ class Git(FetchMethod):
         """
         return ud.type in ['git']
 
+    def supports_checksum(self, urldata):
+        return False
+
     def urldata_init(self, ud, d):
         """
         init git specific variable within url data
index 91ac15faae334a8ad72567ead27757ecaa1d8471..8d6434a7eb585589728001ffe8fcab9b8cafef4b 100644 (file)
@@ -69,6 +69,9 @@ class SSH(FetchMethod):
     def supports(self, url, urldata, d):
         return __pattern__.match(url) != None
 
+    def supports_checksum(self, urldata):
+        return False
+
     def localpath(self, url, urldata, d):
         m = __pattern__.match(urldata.url)
         path = m.group('path')
index 98900ac42c0e0490b0533aad47f44cb00b31570d..e223b21b96148823077afc7e4b209c564582af55 100644 (file)
@@ -45,6 +45,9 @@ class Wget(FetchMethod):
         """
         return ud.type in ['http', 'https', 'ftp']
 
+    def recommends_checksum(self, urldata):
+        return True
+
     def urldata_init(self, ud, d):
 
         ud.basename = os.path.basename(ud.path)