mirror of
https://github.com/zeldaret/oot.git
synced 2024-11-14 21:40:03 +00:00
80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
# 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 = set(modified_files_str.splitlines())
|
|
|
|
all_src_files, all_extra_files = format.list_files_to_format()
|
|
# Split modified_files between source files and extra files (see format.py)
|
|
# This also filters out deleted files that no longer exist
|
|
modified_src_files_existing = list(modified_files.intersection(all_src_files))
|
|
modified_extra_files_existing = list(modified_files.intersection(all_extra_files))
|
|
|
|
return modified_src_files_existing, modified_extra_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, extra_files = get_modified_files_to_format(args.compare_to)
|
|
if args.verbose:
|
|
print("Formatting specific files:")
|
|
print(len(src_files), src_files)
|
|
print(len(extra_files), extra_files)
|
|
if not src_files and not extra_files:
|
|
if args.verbose:
|
|
print("Nothing to format")
|
|
exit(0)
|
|
else:
|
|
src_files, extra_files = format.list_files_to_format()
|
|
|
|
nb_jobs = multiprocessing.cpu_count()
|
|
|
|
git_status_pre = get_git_status()
|
|
|
|
format.format_files(src_files, extra_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()
|