memgraph/tools/pre-commit/clang-tidy.py
Gareth Andrew Lloyd 2e51e703c3
Add supernode vertex cache (#1124)
Add supernode vertex cache to account for long delta chains and modifications in the same module being independent of scanning of the nodes in the next iteration of the pulling mechanism.
2023-08-11 10:18:28 +02:00

57 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import os
import subprocess
import sys
CLANG_TIDY_DIFF = "./tools/github/clang-tidy/clang-tidy-diff.py"
def check_clang_tidy():
try:
subprocess.run(["clang-tidy", "--version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except FileNotFoundError:
print("clang-tidy is not installed. Please install clang-tidy and try again.", file=sys.stderr)
sys.exit(1)
except subprocess.CalledProcessError:
print("Error while checking clang-tidy version.", file=sys.stderr)
sys.exit(1)
if not os.path.exists(CLANG_TIDY_DIFF):
print(f"Error can't find '{CLANG_TIDY_DIFF}'.", file=sys.stderr)
sys.exit(1)
def run_clang_tidy_on_files(compile_commands_path):
process1 = subprocess.Popen("git diff -U0 HEAD".split(), stdout=subprocess.PIPE)
process2 = subprocess.Popen(
f"{CLANG_TIDY_DIFF} -p1 -j 8 -path {compile_commands_path}".split(),
stdin=process1.stdout,
stdout=subprocess.PIPE,
)
process1.stdout.close() # Close the output pipe of the first process
output, err_output = process2.communicate() # Get the output from the second process
if process2.returncode != 0:
print("Error occurred in clang-tidy-diff command:")
if output:
print(output.decode().strip())
if err_output:
print(err_output.decode().strip(), file=sys.stderr)
sys.exit(1)
def main():
check_clang_tidy()
parser = argparse.ArgumentParser(description="Run clang-tidy on specified files.")
# parser.add_argument("file_paths", nargs="+", type=str, help="Paths to files to be checked.")
parser.add_argument("--compile_commands_path", type=str, required=True, help="Path to compile_commands.json.")
args = parser.parse_args()
run_clang_tidy_on_files(args.compile_commands_path)
if __name__ == "__main__":
main()