ACE3/tools/config_validator.py

132 lines
3.7 KiB
Python

#!/usr/bin/env python3
#by PabstMirror - python script to verify all addons using MakePbo's lint checking and extFile Checking
#Arguments (eg: `config_validator.py full`):
#full dump full deRaped config of problem
#skipExt skips checking external file references
import os
import sys
import subprocess
import timeit
import time
######## GLOBALS #########
MAINPREFIX = "Z"
PREFIX = "ACE"
##########################
def Fract_Sec(s):
temp = float()
temp = float(s) / (60*60*24)
d = int(temp)
temp = (temp - d) * 24
h = int(temp)
temp = (temp - h) * 60
m = int(temp)
temp = (temp - m) * 60
sec = temp
return d,h,m,sec
def CheckPBO(p,useMakePbo,checkExternalFiles,errors):
try:
if useMakePbo:
makePboArgs = "-PGU"
if not checkExternalFiles:
makePboArgs = "-PU"
subprocess.run([
"makepbo",
makePboArgs,
"-@={}\\{}\\addons\\{}".format(MAINPREFIX,PREFIX.rstrip("_"),p),
p,
"{}_{}.pbo".format(PREFIX,p)
], stdin=None, input=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
else:
makePboArgs = "-LEP"
if not checkExternalFiles:
makePboArgs = "-LP"
subprocess.run([
"rapify",
makePboArgs,
p
], stdin=None, input=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
print("!! Problem With {} ret {} !!".format(p, e.returncode))
print(" stderr: {}".format(e.stderr))
errors.append(p)
else:
print(" Checked ok {}".format(p))
return
def fullDump(p):
try:
subprocess.run([
"makepbo",
"-PGUS", #G Check external references -S show deRap - P dont pause
"-@={}\\{}\\addons\\{}".format(MAINPREFIX,PREFIX.rstrip("_"),p),
p,
"{}_{}.pbo".format(PREFIX,p)
], stdin=None, input=None, check=True)
except subprocess.CalledProcessError as e:
input("Press Enter to continue...")
return
def main(argv):
print("""
####################
# ACE3 Config Check #
####################
""")
start_time = timeit.default_timer()
addonspath = os.path.join("P:\\",MAINPREFIX,PREFIX,"addons")
print("Switching to dir: {}".format(addonspath))
try:
os.chdir(addonspath)
except:
raise Exception("Failed to switch to addon dir on P:")
useMakePbo = False
checkExternalFiles = True
if "skipExt" in argv:
print("Skipping External Files Check");
checkExternalFiles = False
if "make" in argv:
# will check more files like RTM and RVMats but twice as slow
# This also actually builds a pbo (in same spot as build.py)
print("Using makePbo to verify all files");
useMakePbo = True
errors = []
for p in os.listdir(addonspath):
path = os.path.join(addonspath, p)
if not os.path.isdir(path):
continue
if p[0] == ".":
continue
CheckPBO(p,useMakePbo,checkExternalFiles,errors)
d,h,m,s = Fract_Sec(timeit.default_timer() - start_time)
print("\n# Done with {0} errrors [took: {1:2}h {2:2}m {3:4.5f}s]".format(len(errors),h,m,s))
if (len(errors) > 0):
if "full" in argv:
input("Dumping Full DeRap: Press Enter to continue...")
for p in errors:
fullDump(p)
else:
print("use 'full' arg to show derap")
ret = len(errors)
print("return {}".format(ret))
return ret
if __name__ == "__main__":
main(sys.argv)