From patchwork Tue Jan 10 16:31:47 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [4/4] oe.license: avoid the need to catch SyntaxError Date: Tue, 10 Jan 2012 16:31:47 -0000 From: Christopher Larson X-Patchwork-Id: 18941 Message-Id: <9ad5b4ce4a4454fa9d5e41850edf43b75f260985.1326213043.git.chris_larson@mentor.com> To: openembedded-core@lists.openembedded.org Cc: Christopher Larson From: Christopher Larson Signed-off-by: Christopher Larson --- meta/classes/copyleft_compliance.bbclass | 4 +--- meta/lib/oe/license.py | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/meta/classes/copyleft_compliance.bbclass b/meta/classes/copyleft_compliance.bbclass index 6f058e0..2eb9ded 100644 --- a/meta/classes/copyleft_compliance.bbclass +++ b/meta/classes/copyleft_compliance.bbclass @@ -48,10 +48,8 @@ def copyleft_should_include(d): try: is_included, excluded = oe.license.is_included(d.getVar('LICENSE', True), include, exclude) - except oe.license.InvalidLicense as exc: + except oe.license.LicenseError as exc: bb.fatal('%s: %s' % (d.getVar('PF', True), exc)) - except SyntaxError as exc: - bb.warn('%s: error when parsing the LICENSE variable: %s' % (d.getVar('P', True), exc)) else: if is_included: return True, None diff --git a/meta/lib/oe/license.py b/meta/lib/oe/license.py index 3543cfe..5914506 100644 --- a/meta/lib/oe/license.py +++ b/meta/lib/oe/license.py @@ -5,13 +5,25 @@ import ast import re from fnmatch import fnmatchcase as fnmatch -class InvalidLicense(StandardError): +class LicenseError(StandardError): + pass + +class LicenseSyntaxError(LicenseError): + def __init__(self, licensestr, exc): + self.licensestr = licensestr + self.exc = exc + LicenseError.__init__(self) + + def __str__(self): + return "error in '%s': %s" % (self.licensestr, self.exc) + +class InvalidLicense(LicenseError): def __init__(self, license): self.license = license - StandardError.__init__(self) + LicenseError.__init__(self) def __str__(self): - return "invalid license '%s'" % self.license + return "invalid characters in license '%s'" % self.license license_operator = re.compile('([&|() ])') license_pattern = re.compile('[a-zA-Z0-9.+_\-]+$') @@ -59,7 +71,10 @@ class FlattenVisitor(LicenseVisitor): def flattened_licenses(licensestr, choose_licenses): """Given a license string and choose_licenses function, return a flat list of licenses""" flatten = FlattenVisitor(choose_licenses) - flatten.visit_string(licensestr) + try: + flatten.visit_string(licensestr) + except SyntaxError as exc: + raise LicenseSyntaxError(licensestr, exc) return flatten.licenses def is_included(licensestr, whitelist=None, blacklist=None):