]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools/PatchCheck.py: Add warning info for new binary files
authorHao Wu <hao.a.wu@intel.com>
Thu, 8 Jun 2017 06:57:48 +0000 (14:57 +0800)
committerHao Wu <hao.a.wu@intel.com>
Mon, 26 Jun 2017 01:34:11 +0000 (09:34 +0800)
The commit adds the detection of adding new binary files in a patch file
or in a commit.

The following warning messages will be appended at the end of the script
output:

WARNING - The following binary files will be added into the repository:
  <BinaryFile1>
  <BinaryFile2>
  ...

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Scripts/PatchCheck.py

index 4bc697b1af1623ca247d87de187dc319ec7fe947..7bc5736dbf2ece138d20dc5947eef861c6ff9dac 100755 (executable)
@@ -243,6 +243,7 @@ class GitDiffCheck:
         self.count = len(self.lines)\r
         self.line_num = 0\r
         self.state = START\r
+        self.new_bin = []\r
         while self.line_num < self.count and self.format_ok:\r
             line_num = self.line_num\r
             self.run()\r
@@ -254,6 +255,11 @@ class GitDiffCheck:
             return\r
         if self.ok:\r
             print('The code passed all checks.')\r
+        if self.new_bin:\r
+            print('\nWARNING - The following binary files will be added ' +\r
+                  'into the repository:')\r
+            for binary in self.new_bin:\r
+                print('  ' + binary)\r
 \r
     def run(self):\r
         line = self.lines[self.line_num]\r
@@ -276,21 +282,25 @@ class GitDiffCheck:
         if self.state == START:\r
             if line.startswith('diff --git'):\r
                 self.state = PRE_PATCH\r
-                self.set_filename(None)\r
+                self.filename = line[13:].split(' ',1)[0]\r
+                self.is_newfile = False\r
+                self.force_crlf = not self.filename.endswith('.sh')\r
             elif len(line.rstrip()) != 0:\r
                 self.format_error("didn't find diff command")\r
             self.line_num += 1\r
         elif self.state == PRE_PATCH:\r
-            if line.startswith('+++ b/'):\r
-                self.set_filename(line[6:].rstrip())\r
             if line.startswith('@@ '):\r
                 self.state = PATCH\r
                 self.binary = False\r
-            elif line.startswith('GIT binary patch'):\r
+            elif line.startswith('GIT binary patch') or \\r
+                 line.startswith('Binary files'):\r
                 self.state = PATCH\r
                 self.binary = True\r
+                if self.is_newfile:\r
+                    self.new_bin.append(self.filename)\r
             else:\r
                 ok = False\r
+                self.is_newfile = self.newfile_prefix_re.match(line)\r
                 for pfx in self.pre_patch_prefixes:\r
                     if line.startswith(pfx):\r
                         ok = True\r
@@ -320,22 +330,20 @@ class GitDiffCheck:
         'new mode ',\r
         'similarity index ',\r
         'rename ',\r
-        'Binary files ',\r
         )\r
 \r
     line_endings = ('\r\n', '\n\r', '\n', '\r')\r
 \r
-    def set_filename(self, filename):\r
-        self.hunk_filename = filename\r
-        if filename:\r
-            self.force_crlf = not filename.endswith('.sh')\r
-        else:\r
-            self.force_crlf = True\r
+    newfile_prefix_re = \\r
+        re.compile(r'''^\r
+                       index\ 0+\.\.\r
+                   ''',\r
+                   re.VERBOSE)\r
 \r
     def added_line_error(self, msg, line):\r
         lines = [ msg ]\r
-        if self.hunk_filename is not None:\r
-            lines.append('File: ' + self.hunk_filename)\r
+        if self.filename is not None:\r
+            lines.append('File: ' + self.filename)\r
         lines.append('Line: ' + line)\r
 \r
         self.error(*lines)\r