public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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


             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