From: "Zhang, Shenglei" <shenglei.zhang@intel.com>
To: devel@edk2.groups.io
Cc: Bob Feng <bob.c.feng@intel.com>, Liming Gao <liming.gao@intel.com>
Subject: [PATCH v4] BaseTools/PatchCheck.py: Add LicenseCheck
Date: Fri, 5 Jun 2020 17:21:38 +0800 [thread overview]
Message-ID: <20200605092138.32660-1-shenglei.zhang@intel.com> (raw)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2691
For files to be added to the tree, this feature will check
whether it has BSD plus patent license. If not, licenses listed in
Readme are also accepted but warning will be reported.
Otherwise, it should be error.
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
---
v2: Update handling methods for different licenses.
v3: Change the position of LicenseCheck(). No functional
update.
v4: Extend the scope of file types to scan.
BaseTools/Scripts/PatchCheck.py | 50 +++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/BaseTools/Scripts/PatchCheck.py b/BaseTools/Scripts/PatchCheck.py
index 13da6967785d..106b434c750d 100755
--- a/BaseTools/Scripts/PatchCheck.py
+++ b/BaseTools/Scripts/PatchCheck.py
@@ -304,12 +304,49 @@ class GitDiffCheck:
self.line_num = 0
self.state = START
self.new_bin = []
+ self.LicenseCheck(self.lines, self.count)
while self.line_num < self.count and self.format_ok:
line_num = self.line_num
self.run()
assert(self.line_num > line_num)
self.report_message_result()
+ def LicenseCheck(self, lines, count):
+ self.ok = True
+ self.startcheck = False
+ self.license = True
+ line_index = 0
+ for line in lines:
+ if line.startswith('--- /dev/null'):
+ nextline = lines[line_index + 1]
+ added_file = self.Readdedfileformat.search(nextline).group(1)
+ added_file_extension = os.path.splitext(added_file)[1]
+ if added_file_extension in self.file_extension_list:
+ self.startcheck = True
+ self.license = False
+ if self.startcheck and self.license_format_preflix in line:
+ if self.bsd2_patent in line or self.bsd3_patent in line:
+ self.license = True
+ else:
+ for optional_license in self.license_optional_list:
+ if optional_license in line:
+ self.license = True
+ self.warning(added_file)
+ if line_index + 1 == count or lines[line_index + 1].startswith('diff --') and self.startcheck:
+ if not self.license:
+ error_message = "Invalid License in: " + added_file
+ self.error(error_message)
+ self.startcheck = False
+ self.license = True
+ line_index = line_index + 1
+
+ def warning(self, *err):
+ count = 0
+ for line in err:
+ warning_format = 'Warning: License accepted but not BSD plus patent license in'
+ print(warning_format, line)
+ count += 1
+
def report_message_result(self):
if Verbose.level < Verbose.NORMAL:
return
@@ -491,6 +528,19 @@ class GitDiffCheck:
print(prefix, line)
count += 1
+ license_format_preflix = 'SPDX-License-Identifier'
+
+ bsd2_patent = 'BSD-2-Clause-Patent'
+
+ bsd3_patent = 'BSD-3-Clause-Patent'
+
+ license_optional_list = ['BSD-2-Clause', 'BSD-3-Clause', 'MIT', 'Python-2.0', 'Zlib']
+
+ Readdedfileformat = re.compile(r'\+\+\+ b\/(.*)\n')
+
+ file_extension_list = [".c", ".h", ".inf", ".dsc", ".dec", ".py", ".bat", ".sh", ".uni", ".yaml", ".fdf", ".inc", "yml", ".asm", \
+ ".asm16", ".asl", ".vfr", ".s", ".S", ".aslc", ".nasm", ".nasmb", ".idf", ".Vfr", ".H"]
+
class CheckOnePatch:
"""Checks the contents of a git email formatted patch.
--
2.18.0.windows.1
next reply other threads:[~2020-06-05 9:21 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-05 9:21 Zhang, Shenglei [this message]
2020-06-07 6:49 ` [PATCH v4] BaseTools/PatchCheck.py: Add LicenseCheck Liming Gao
2020-06-08 0:20 ` [edk2-devel] " Yuwei Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200605092138.32660-1-shenglei.zhang@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox