From cecc726b9165629b352abf647f5f18f4b061ab81 Mon Sep 17 00:00:00 2001
From: Gilles Peskine <Gilles.Peskine@arm.com>
Date: Tue, 24 Mar 2020 22:26:01 +0100
Subject: [PATCH] Also check Windows files

Check Windows files for some issues, including permissions. Omit the
checks related to special characters (whitespace, line endings,
encoding) as appropriate.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
---
 tests/scripts/check-files.py | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/tests/scripts/check-files.py b/tests/scripts/check-files.py
index 5aa4f9c1e..a046f2677 100755
--- a/tests/scripts/check-files.py
+++ b/tests/scripts/check-files.py
@@ -81,6 +81,12 @@ class LineIssueTracker(FileIssueTracker):
             for i, line in enumerate(iter(f.readline, b"")):
                 self.check_file_line(filepath, line, i + 1)
 
+
+def is_windows_file(filepath):
+    _root, ext = os.path.splitext(filepath)
+    return ext in ('.dsp', '.sln', '.vcxproj')
+
+
 class PermissionIssueTracker(FileIssueTracker):
     """Track files with bad permissions.
 
@@ -113,16 +119,21 @@ class Utf8BomIssueTracker(FileIssueTracker):
 
     heading = "UTF-8 BOM present:"
 
+    files_exemptions = frozenset([".vcxproj", ".sln"])
+
     def check_file_for_issue(self, filepath):
         with open(filepath, "rb") as f:
             if f.read().startswith(codecs.BOM_UTF8):
                 self.files_with_issues[filepath] = None
 
 
-class LineEndingIssueTracker(LineIssueTracker):
+class UnixLineEndingIssueTracker(LineIssueTracker):
     """Track files with non-Unix line endings (i.e. files with CR)."""
 
-    heading = "Non Unix line endings:"
+    heading = "Non-Unix line endings:"
+
+    def should_check_file(self, filepath):
+        return not is_windows_file(filepath)
 
     def issue_with_line(self, line, _filepath):
         return b"\r" in line
@@ -132,7 +143,7 @@ class TrailingWhitespaceIssueTracker(LineIssueTracker):
     """Track lines with trailing whitespace."""
 
     heading = "Trailing whitespace:"
-    files_exemptions = frozenset(".md")
+    files_exemptions = frozenset([".dsp", ".md"])
 
     def issue_with_line(self, line, _filepath):
         return line.rstrip(b"\r\n") != line.rstrip()
@@ -143,6 +154,7 @@ class TabIssueTracker(LineIssueTracker):
 
     heading = "Tabs present:"
     files_exemptions = frozenset([
+        ".sln",
         "/Makefile",
         "/generate_visualc_files.pl",
     ])
@@ -182,12 +194,15 @@ class IntegrityChecker(object):
         self.extensions_to_check = (
             ".c",
             ".data",
+            ".dsp",
             ".function",
             ".h",
             ".md",
             ".pl",
             ".py",
             ".sh",
+            ".sln",
+            ".vcxproj",
             "/CMakeLists.txt",
             "/ChangeLog",
             "/Makefile",
@@ -204,7 +219,7 @@ class IntegrityChecker(object):
             PermissionIssueTracker(),
             EndOfFileNewlineIssueTracker(),
             Utf8BomIssueTracker(),
-            LineEndingIssueTracker(),
+            UnixLineEndingIssueTracker(),
             TrailingWhitespaceIssueTracker(),
             TabIssueTracker(),
             MergeArtifactIssueTracker(),