Added merging fields/methods/param csv files. And updated FML to 197
This commit is contained in:
parent
06bd2d9d44
commit
188d40b89a
8 changed files with 21188 additions and 4565 deletions
3907
conf/fields.csv
Normal file
3907
conf/fields.csv
Normal file
File diff suppressed because it is too large
Load diff
9110
conf/joined.srg
9110
conf/joined.srg
File diff suppressed because it is too large
Load diff
3509
conf/methods.csv
Normal file
3509
conf/methods.csv
Normal file
File diff suppressed because it is too large
Load diff
9145
conf/params.csv
Normal file
9145
conf/params.csv
Normal file
File diff suppressed because it is too large
Load diff
|
@ -5,3 +5,4 @@
|
||||||
/.projects/*/.markers
|
/.projects/*/.markers
|
||||||
/.projects/*/*/
|
/.projects/*/*/
|
||||||
/.root/
|
/.root/
|
||||||
|
/*.snap
|
||||||
|
|
Binary file not shown.
65
forge.py
65
forge.py
|
@ -2,6 +2,7 @@ import os, os.path, sys
|
||||||
import urllib, zipfile
|
import urllib, zipfile
|
||||||
import shutil, glob, fnmatch
|
import shutil, glob, fnmatch
|
||||||
import subprocess, logging, re
|
import subprocess, logging, re
|
||||||
|
import csv, shutil
|
||||||
import pprint
|
import pprint
|
||||||
|
|
||||||
forge_dir = os.path.dirname(os.path.abspath(__file__))
|
forge_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
@ -121,7 +122,9 @@ def get_conf_copy(mcp_dir, forge_dir):
|
||||||
common_exc = gen_merged_exc(mcp_dir, forge_dir)
|
common_exc = gen_merged_exc(mcp_dir, forge_dir)
|
||||||
common_map = gen_shared_searge_names(common_srg, common_exc)
|
common_map = gen_shared_searge_names(common_srg, common_exc)
|
||||||
#ToDo use common_map to merge the remaining csvs, client taking precidense, setting the common items to side '2' and editing commands.py in FML to have 'if csv_side == side || csv_side == '2''
|
#ToDo use common_map to merge the remaining csvs, client taking precidense, setting the common items to side '2' and editing commands.py in FML to have 'if csv_side == side || csv_side == '2''
|
||||||
#gen_merged_fields(os.path.join(mcp_dir, 'conf', 'fields.csv'), os.path.join(forge_dir, 'conf', 'fields.csv'))
|
gen_merged_csv(common_map, os.path.join(mcp_dir, 'conf', 'fields.csv'), os.path.join(forge_dir, 'conf', 'fields.csv'))
|
||||||
|
gen_merged_csv(common_map, os.path.join(mcp_dir, 'conf', 'methods.csv'), os.path.join(forge_dir, 'conf', 'methods.csv'))
|
||||||
|
gen_merged_csv(common_map, os.path.join(mcp_dir, 'conf', 'params.csv'), os.path.join(forge_dir, 'conf', 'params.csv'), main_key='param')
|
||||||
|
|
||||||
|
|
||||||
def gen_merged_srg(mcp_dir, forge_dir):
|
def gen_merged_srg(mcp_dir, forge_dir):
|
||||||
|
@ -159,14 +162,14 @@ def gen_merged_srg(mcp_dir, forge_dir):
|
||||||
client[type].pop(key)
|
client[type].pop(key)
|
||||||
server[type].pop(key)
|
server[type].pop(key)
|
||||||
common[type][key] = value
|
common[type][key] = value
|
||||||
|
|
||||||
for type in common:
|
for type in common:
|
||||||
for key, value in client[type].items():
|
for key, value in client[type].items():
|
||||||
common[type][key] = value + ' #C'
|
common[type][key] = value #+ ' #C'
|
||||||
|
|
||||||
for type in common:
|
for type in common:
|
||||||
for key, value in server[type].items():
|
for key, value in server[type].items():
|
||||||
common[type][key] = value + ' #S'
|
common[type][key] = value #+ ' #S'
|
||||||
|
|
||||||
#Print joined retroguard files
|
#Print joined retroguard files
|
||||||
with open(os.path.join(forge_dir, 'conf', 'joined.srg'), 'w') as f:
|
with open(os.path.join(forge_dir, 'conf', 'joined.srg'), 'w') as f:
|
||||||
|
@ -211,12 +214,12 @@ def gen_merged_exc(mcp_dir, forge_dir):
|
||||||
if value != '|':
|
if value != '|':
|
||||||
common[key] = value
|
common[key] = value
|
||||||
|
|
||||||
common = dict(common.items() + server.items())
|
joined = dict(common.items() + server.items())
|
||||||
|
|
||||||
#Print joined mcinjector files
|
#Print joined mcinjector files
|
||||||
with open(os.path.join(forge_dir, 'conf', 'joined.exc'), 'w') as f:
|
with open(os.path.join(forge_dir, 'conf', 'joined.exc'), 'w') as f:
|
||||||
for key in sorted(common):
|
for key in sorted(joined):
|
||||||
f.write('%s=%s\n' % (key, common[key]))
|
f.write('%s=%s\n' % (key, joined[key]))
|
||||||
|
|
||||||
return common
|
return common
|
||||||
|
|
||||||
|
@ -225,6 +228,8 @@ def gen_shared_searge_names(common_srg, common_exc):
|
||||||
method = re.compile(r'func_[0-9]+_[a-zA-Z_]+')
|
method = re.compile(r'func_[0-9]+_[a-zA-Z_]+')
|
||||||
param = re.compile(r'p_[\w]+_\d+_')
|
param = re.compile(r'p_[\w]+_\d+_')
|
||||||
|
|
||||||
|
print 'Gathering list of common searge names'
|
||||||
|
|
||||||
searge = []
|
searge = []
|
||||||
|
|
||||||
for key, value in common_srg['FD:'].items():
|
for key, value in common_srg['FD:'].items():
|
||||||
|
@ -242,10 +247,52 @@ def gen_shared_searge_names(common_srg, common_exc):
|
||||||
for key, value in common_exc.items():
|
for key, value in common_exc.items():
|
||||||
m = param.findall(value)
|
m = param.findall(value)
|
||||||
if not m is None:
|
if not m is None:
|
||||||
print m
|
|
||||||
for p in m:
|
for p in m:
|
||||||
if not p in searge:
|
if not p in searge:
|
||||||
searge.append(p)
|
searge.append(p)
|
||||||
|
|
||||||
return searge
|
return searge
|
||||||
|
|
||||||
|
def gen_merged_csv(common_map, in_file, out_file, main_key='searge'):
|
||||||
|
reader = csv.DictReader(open(in_file, 'r'))
|
||||||
|
print 'Generating merged csv for %s' % os.path.basename(in_file)
|
||||||
|
sides = {'client': [], 'server': [], 'common': []}
|
||||||
|
added = []
|
||||||
|
for row in reader:
|
||||||
|
side = int(row['side'])
|
||||||
|
if row[main_key] in common_map:
|
||||||
|
if not row[main_key] in added:
|
||||||
|
row['side'] = '2'
|
||||||
|
sides['common'].append(row)
|
||||||
|
added.append(row[main_key])
|
||||||
|
elif side == 0:
|
||||||
|
sides['client'].append(row)
|
||||||
|
else:
|
||||||
|
sides['server'].append(row)
|
||||||
|
|
||||||
|
writer = csv.DictWriter(open(out_file, 'wb'), fieldnames=reader.fieldnames)
|
||||||
|
writer.writeheader()
|
||||||
|
for key in ['client', 'server', 'common']:
|
||||||
|
for row in sorted(sides[key], key=lambda row: row[main_key]):
|
||||||
|
writer.writerow(row)
|
||||||
|
|
||||||
|
#pprint.pprint(sides)
|
||||||
|
|
||||||
|
def setup_forge_mcp(mcp_dir, forge_dir, dont_gen_conf=True):
|
||||||
|
mcp_conf = os.path.join(mcp_dir, 'conf')
|
||||||
|
mcp_conf_bak = os.path.join(mcp_dir, 'conf.bak')
|
||||||
|
forge_conf = os.path.join(forge_dir, 'conf')
|
||||||
|
|
||||||
|
if os.path.isdir(mcp_conf_bak):
|
||||||
|
print 'Removing old conf backup folder'
|
||||||
|
shutil.rmtree(mcp_conf_bak)
|
||||||
|
|
||||||
|
if not dont_gen_conf:
|
||||||
|
get_conf_copy(mcp_dir, forge_dir)
|
||||||
|
|
||||||
|
print 'Backing up MCP Conf'
|
||||||
|
os.rename(mcp_conf, mcp_conf_bak)
|
||||||
|
|
||||||
|
print 'Copying Forge conf'
|
||||||
|
shutil.copytree(forge_conf, mcp_conf)
|
||||||
|
|
16
setup.py
16
setup.py
|
@ -7,10 +7,12 @@ forge_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
mcp_dir = os.path.abspath('..')
|
mcp_dir = os.path.abspath('..')
|
||||||
src_dir = os.path.join(mcp_dir, 'src')
|
src_dir = os.path.join(mcp_dir, 'src')
|
||||||
|
|
||||||
from forge import apply_forge_patches
|
from forge import setup_forge_mcp, apply_forge_patches
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
print '=================================== Setup Start ================================='
|
print '=================================== Setup Start ================================='
|
||||||
|
dont_gen_conf = '-no_gen_conf' in sys.argv
|
||||||
|
setup_forge_mcp(mcp_dir, forge_dir, dont_gen_conf)
|
||||||
setup_fml()
|
setup_fml()
|
||||||
|
|
||||||
base_dir = os.path.join(mcp_dir, 'src_base')
|
base_dir = os.path.join(mcp_dir, 'src_base')
|
||||||
|
@ -28,6 +30,18 @@ def main():
|
||||||
print 'Applying forge patches'
|
print 'Applying forge patches'
|
||||||
apply_forge_patches(os.path.join(forge_dir, 'fml'), mcp_dir, forge_dir, work_dir, False)
|
apply_forge_patches(os.path.join(forge_dir, 'fml'), mcp_dir, forge_dir, work_dir, False)
|
||||||
|
|
||||||
|
#Restore mcp/conf.bak, therefore restoring normal MCP updating ability
|
||||||
|
if not dont_gen_conf:
|
||||||
|
mcp_conf = os.path.join(mcp_dir, 'conf')
|
||||||
|
mcp_conf_bak = os.path.join(mcp_dir, 'conf.bak')
|
||||||
|
|
||||||
|
if os.path.isdir(mcp_conf):
|
||||||
|
print 'Removing new conf folder'
|
||||||
|
shutil.rmtree(mcp_conf)
|
||||||
|
|
||||||
|
print 'Restoreing original MCP Conf'
|
||||||
|
os.rename(mcp_conf_bak, mcp_conf)
|
||||||
|
|
||||||
print '=================================== Setup Finished ================================='
|
print '=================================== Setup Finished ================================='
|
||||||
|
|
||||||
def setup_fml():
|
def setup_fml():
|
||||||
|
|
Loading…
Reference in a new issue