mirror of
https://github.com/open-goal/jak-project
synced 2026-05-30 08:56:59 -04:00
6d99f1bfc1
Reasons for doing so include: 1. This should stop the confusion around editing the wrong config file's flags -- when for example, extracting a level. Common settings can be in one central place, with bespoke overrides being provided for each version 2. Less verbose way of supporting multiple game versions. You don't have to duplicate the entire `type_casts` file for example, just add or override the json objects required. 3. Makes the folder structure consistent, Jak 1's `all-types` is now in a `jak1` folder, etc.
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
# Updates files in gsrc if they are modified in the reference test folder
|
|
# Uses git
|
|
import subprocess
|
|
from git import Repo
|
|
|
|
repo = Repo("./")
|
|
|
|
import argparse
|
|
import os
|
|
import glob
|
|
|
|
parser = argparse.ArgumentParser("update-gsrc-via-refs")
|
|
parser.add_argument("--game", help="The name of the game", type=str)
|
|
parser.add_argument("--decompiler", help="The path to the decompiler", type=str)
|
|
parser.add_argument("--decompiler_config", help="The decomp config", type=str)
|
|
parser.add_argument("--version", help="The decomp config version", type=str)
|
|
parser.add_argument("--file_pattern", help="Provide a glob pattern to find files, instead of using git status. Relative to the reference test folder", type=str)
|
|
args = parser.parse_args()
|
|
|
|
def get_files_via_git():
|
|
file_names = set()
|
|
for item in repo.index.diff(None):
|
|
path = item.b_rawpath.decode("utf-8")
|
|
if args.game in path and "_REF" in path:
|
|
file_names.add(os.path.basename(path).replace("_REF.gc", ""))
|
|
|
|
for item in repo.untracked_files:
|
|
path = item
|
|
if args.game in path and "_REF" in path:
|
|
file_names.add(os.path.basename(path).replace("_REF.gc", ""))
|
|
return file_names
|
|
|
|
def get_files_via_glob():
|
|
file_names = set()
|
|
for file in glob.glob("./test/decompiler/reference/{}/{}".format(args.game, args.file_pattern), recursive=True):
|
|
file_names.add(os.path.basename(file).replace("_REF.gc", ""))
|
|
return file_names
|
|
|
|
# Get a list of changed files, as well as new files
|
|
file_names = []
|
|
if args.file_pattern:
|
|
file_names = get_files_via_glob()
|
|
else:
|
|
file_names = get_files_via_git()
|
|
|
|
for file_name in file_names:
|
|
print("Decompiling - {}".format(file_name))
|
|
# Decompile file
|
|
subprocess.run(
|
|
[
|
|
args.decompiler,
|
|
"./decompiler/config/{}".format(args.decompiler_config),
|
|
"./iso_data",
|
|
"./decompiler_out",
|
|
"--version",
|
|
args.version,
|
|
"--config-override",
|
|
'{{"allowed_objects": ["{}"]}}'.format(file_name),
|
|
]
|
|
)
|
|
print("Updating - {}".format(file_name))
|
|
# Update gsrc
|
|
os.system(
|
|
"python ./scripts/gsrc/update-from-decomp.py --game {} --file {}".format(
|
|
args.game, file_name
|
|
)
|
|
)
|