summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Wiederhake <BenWiederhake.GitHub@gmx.de>2022-09-18 20:10:57 +0200
committerBrian Gianforcaro <b.gianfo@gmail.com>2022-09-18 18:45:25 -0700
commitde581ca5fdeb7006f0dd23a2f63310a65159caa5 (patch)
tree23a7cd4a53817f7188c274928b0f2861c01a5d07
parent4caaa78bafbe104cc249a0bb8a6cf3a88f498555 (diff)
downloadserenity-de581ca5fdeb7006f0dd23a2f63310a65159caa5.zip
Meta: Only check changed files in check-newlines-at-eof
This speeds up the script from about 120ms down to about 20ms for reasonably common changesets. 100ms may not feel like much, but it adds up quickly, especially since we run a dozen scripts during pre-commit.
-rwxr-xr-xMeta/check-newlines-at-eof.py55
1 files changed, 31 insertions, 24 deletions
diff --git a/Meta/check-newlines-at-eof.py b/Meta/check-newlines-at-eof.py
index c65620bbed..07445fc4ab 100755
--- a/Meta/check-newlines-at-eof.py
+++ b/Meta/check-newlines-at-eof.py
@@ -1,40 +1,47 @@
#!/usr/bin/env python3
import os
+import re
import subprocess
import sys
+RE_RELEVANT_FILE_EXTENSION = re.compile('\\.(cpp|h|gml|html|js|css|sh|py|json|txt)$')
+
+
+def should_check_file(filename):
+ if not RE_RELEVANT_FILE_EXTENSION.search(filename):
+ return False
+ if filename.startswith('Userland/Libraries/LibCodeComprehension/Cpp/Tests/'):
+ return False
+ if filename.startswith('Userland/Libraries/LibCpp/Tests/parser/'):
+ return False
+ if filename.startswith('Userland/Libraries/LibCpp/Tests/preprocessor/'):
+ return False
+ if filename == 'Kernel/FileSystem/ext2_fs.h':
+ return False
+ if filename.endswith('.txt'):
+ return 'CMake' in filename
+ return True
+
+
+def find_files_here_or_argv():
+ if len(sys.argv) > 1:
+ raw_list = sys.argv[1:]
+ else:
+ process = subprocess.run(["git", "ls-files"], check=True, capture_output=True)
+ raw_list = process.stdout.decode().strip('\n').split('\n')
+
+ return filter(should_check_file, raw_list)
+
+
def run():
"""Check files checked in to git for trailing newlines at end of file."""
- files = subprocess.run(
- [
- "git", "ls-files", "--",
- "*.cpp",
- "*.h",
- "*.gml",
- "*.html",
- "*.js",
- "*.css",
- "*.sh",
- "*.py",
- "*.json",
- "CMake*.txt",
- "**/CMake*.txt",
- ":!:Kernel/FileSystem/ext2_fs.h",
- ':!:Userland/Libraries/LibCodeComprehension/Cpp/Tests/*',
- ':!:Userland/Libraries/LibCpp/Tests/parser/*',
- ':!:Userland/Libraries/LibCpp/Tests/preprocessor/*'
- ],
- check=True,
- capture_output=True
- ).stdout.decode().strip('\n').split('\n')
-
no_newline_at_eof_errors = []
blank_lines_at_eof_errors = []
did_fail = False
- for filename in files:
+ for filename in find_files_here_or_argv():
with open(filename, "r") as f:
f.seek(0, os.SEEK_END)