1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-14 13:30:47 +00:00
oot/tools/check_format.py

78 lines
2 KiB
Python
Raw Normal View History

# SPDX-FileCopyrightText: 2024 zeldaret
# SPDX-License-Identifier: CC0-1.0
import subprocess
import argparse
import difflib
import multiprocessing
import glob
import os.path
import sys
sys.path.insert(0, os.curdir)
import format
sys.path.pop(0)
def get_git_status():
return subprocess.check_output("git status --porcelain".split(), text=True)
def get_modified_files_to_format(compare_to):
modified_files_str = subprocess.check_output(
["git", "diff", "--name-only", compare_to], text=True
)
modified_files = modified_files_str.splitlines()
modified_c_files = [
f
for f in modified_files
if f.startswith("src" + os.path.sep) and f.endswith(".c")
]
modified_c_files_existing = [f for f in modified_c_files if os.path.exists(f)]
return modified_c_files_existing
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", action="store_true")
parser.add_argument("--compare-to", dest="compare_to")
args = parser.parse_args()
if args.compare_to:
src_files = get_modified_files_to_format(args.compare_to)
if args.verbose:
print("Formatting specific files:", len(src_files), src_files)
if not src_files:
if args.verbose:
print("Nothing to format")
exit(0)
else:
src_files = glob.glob("src/**/*.c", recursive=True)
nb_jobs = multiprocessing.cpu_count()
git_status_pre = get_git_status()
format.format_files(src_files, [], nb_jobs)
git_status_post = get_git_status()
if git_status_pre != git_status_post:
print(
"Misformatted files found."
" Run ./format.py and verify codegen is not impacted."
)
for l in difflib.unified_diff(
git_status_pre.splitlines(),
git_status_post.splitlines(),
"Old git status",
"New git status",
):
print(l)
exit(1)
if __name__ == "__main__":
main()