summaryrefslogtreecommitdiffstats
path: root/BaseTools
diff options
context:
space:
mode:
authorShenglei Zhang <shenglei.zhang@intel.com>2020-04-21 14:45:02 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2020-06-12 06:26:13 +0000
commita4cfb842fca9693a330cb5435284c1ee8bfbbace (patch)
tree99d3b8ab5f3de6adf13b4315b8daa6e2f95873bd /BaseTools
parent394e8e4bf586b4749620a48a23c816ee19f0e04a (diff)
downloadedk2-a4cfb842fca9693a330cb5435284c1ee8bfbbace.tar.gz
edk2-a4cfb842fca9693a330cb5435284c1ee8bfbbace.tar.bz2
edk2-a4cfb842fca9693a330cb5435284c1ee8bfbbace.zip
BaseTools/PatchCheck.py: Add LicenseCheck
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> Reviewed-by: Yuwei Chen <yuwei.chen@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
Diffstat (limited to 'BaseTools')
-rwxr-xr-xBaseTools/Scripts/PatchCheck.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/BaseTools/Scripts/PatchCheck.py b/BaseTools/Scripts/PatchCheck.py
index 13da696778..106b434c75 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.