5da8218184
Commit 1ba85b7f87
(support/download: add explicit no-hash support)
introduced the 'none' hash type, in an attempt to make hash files
mandatory, but not failing on archives localy generated, like those
for git or svn repositories, especially for those packages where a
version choice was present, which would allow for either remote
archives for which we'd have a hash or VCS trees for which we could
not have a hash for the localy generated archive.
Indeed, back in the time, we did not have a mean to generate
reproducible archives, so having a hash file without a hash for
thosel ocally generated archives would trigger an error in the
hash-checking machinery.
But now, low-and-behold, we do know how to generate those archives,
and we have a mechanism to explicitly exclude some archives from being
hash-checked (e.g. when the version string itself can be user-provided).
As such, the 'none' hash type no longer has any raison d'être, we do not
use it in-tree, and its use in a br2-external tree is most probably
inexistent (as is the use of hash files alotgether most probably).
So we simply drop the support for that.
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
[Thomas: drop support in checkpackagelib, as reported by Ricardo.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
# See utils/checkpackagelib/readme.txt before editing this file.
|
|
# The validity of the hashes itself is checked when building, so below check
|
|
# functions don't need to check for things already checked by running
|
|
# "make package-dirclean package-source".
|
|
|
|
import re
|
|
|
|
from checkpackagelib.base import _CheckFunction
|
|
from checkpackagelib.lib import ConsecutiveEmptyLines # noqa: F401
|
|
from checkpackagelib.lib import EmptyLastLine # noqa: F401
|
|
from checkpackagelib.lib import NewlineAtEof # noqa: F401
|
|
from checkpackagelib.lib import TrailingSpace # noqa: F401
|
|
|
|
|
|
def _empty_line_or_comment(text):
|
|
return text.strip() == "" or text.startswith("#")
|
|
|
|
|
|
class HashNumberOfFields(_CheckFunction):
|
|
def check_line(self, lineno, text):
|
|
if _empty_line_or_comment(text):
|
|
return
|
|
|
|
fields = text.split()
|
|
if len(fields) != 3:
|
|
return ["{}:{}: expected three fields ({}#adding-packages-hash)"
|
|
.format(self.filename, lineno, self.url_to_manual),
|
|
text]
|
|
|
|
|
|
class HashType(_CheckFunction):
|
|
len_of_hash = {"md5": 32, "sha1": 40, "sha224": 56, "sha256": 64,
|
|
"sha384": 96, "sha512": 128}
|
|
|
|
def check_line(self, lineno, text):
|
|
if _empty_line_or_comment(text):
|
|
return
|
|
|
|
fields = text.split()
|
|
if len(fields) < 2:
|
|
return
|
|
|
|
htype, hexa = fields[:2]
|
|
if htype not in self.len_of_hash.keys():
|
|
return ["{}:{}: unexpected type of hash ({}#adding-packages-hash)"
|
|
.format(self.filename, lineno, self.url_to_manual),
|
|
text]
|
|
if not re.match("^[0-9A-Fa-f]{%s}$" % self.len_of_hash[htype], hexa):
|
|
return ["{}:{}: hash size does not match type "
|
|
"({}#adding-packages-hash)"
|
|
.format(self.filename, lineno, self.url_to_manual),
|
|
text,
|
|
"expected {} hex digits".format(self.len_of_hash[htype])]
|
|
|
|
|
|
class HashSpaces(_CheckFunction):
|
|
def check_line(self, lineno, text):
|
|
if _empty_line_or_comment(text):
|
|
return
|
|
|
|
fields = text.split()
|
|
if len(fields) != 3:
|
|
# Handled by HashNumberOfFields
|
|
return
|
|
|
|
if not re.match(re.escape("{} {} {}".format(*fields)), text):
|
|
return ["{}:{}: separation does not match expectation "
|
|
"({}#adding-packages-hash)"
|
|
.format(self.filename, lineno, self.url_to_manual), text]
|