218 lines
4.3 KiB
Python
218 lines
4.3 KiB
Python
from __future__ import annotations
|
|
|
|
import inspect
|
|
import requests
|
|
|
|
from common.commons import *
|
|
import argparse
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description='')
|
|
parser.add_argument('prop', help='config.yml file path')
|
|
parser.add_argument('job', help='job name')
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Automatically set root to be the path of the current file
|
|
args.root = str(Path(__file__).parent.absolute())
|
|
|
|
if args.root is None or args.job is None or args.prop is None:
|
|
parser.print_help()
|
|
exit(-1)
|
|
return args
|
|
|
|
|
|
def job_dataset4j():
|
|
from dataset4j import create_dataset
|
|
|
|
create_dataset(cfg)
|
|
|
|
|
|
def job_dataset4c():
|
|
from otherDatasets import core
|
|
|
|
core()
|
|
|
|
|
|
def job_start_redis(db_dir: str | Path | None = None, redis_port: int | None = None,
|
|
root_dir: str | Path | None = None):
|
|
db_dir = db_dir or join(DATA_PATH, 'redis')
|
|
redis_port = redis_port or REDIS_PORT or 6399
|
|
root_dir = root_dir or Path(__file__).parent
|
|
|
|
redis_shutdown(redis_port)
|
|
print(db_dir)
|
|
redis_start(root_dir, db_dir, redis_port)
|
|
|
|
|
|
def job_richedit():
|
|
job_start_redis()
|
|
cmd = f"JAVA_HOME='{jdk8}' java -jar '{JAR_PATH}' {args.prop} RICHEDITSCRIPT"
|
|
print(f"Running command: {cmd}")
|
|
output = os.system(cmd)
|
|
logging.info(output)
|
|
|
|
|
|
def job_actionSI():
|
|
from pairs import actionPairs, createPairs, importAction
|
|
|
|
job_start_redis()
|
|
matches = actionPairs()
|
|
createPairs(matches)
|
|
importAction()
|
|
|
|
|
|
def job_compare():
|
|
job_start_redis()
|
|
cmd = f"JAVA_HOME='{jdk8}' java -jar '{JAR_PATH}' {args.prop} COMPARE"
|
|
output = shellCallTemplate4jar(cmd)
|
|
logging.info(output)
|
|
|
|
|
|
def job_cluster():
|
|
from abstractPatch import cluster
|
|
|
|
job_start_redis()
|
|
cluster(join(DATA_PATH, 'actions'), join(DATA_PATH, 'pairs'), 'actions')
|
|
|
|
|
|
def job_tokenSI():
|
|
from pairs import tokenPairs, importTokens
|
|
|
|
tokenPairs()
|
|
importTokens()
|
|
|
|
|
|
def job_clusterTokens():
|
|
from abstractPatch import cluster
|
|
|
|
dbDir = join(DATA_PATH, 'redis')
|
|
redis_start(dbDir, REDIS_PORT, PROJECT_TYPE)
|
|
cluster(join(DATA_PATH, 'tokens'), join(DATA_PATH, 'pairsToken'), 'tokens')
|
|
|
|
|
|
def job_codeflaws():
|
|
from otherDatasets import codeflaws
|
|
|
|
codeflaws()
|
|
|
|
|
|
def job_indexClusters():
|
|
from sprinferIndex import runSpinfer, test, divideCoccis, removeDuplicates
|
|
|
|
runSpinfer()
|
|
test()
|
|
divideCoccis()
|
|
removeDuplicates()
|
|
|
|
|
|
def job_patternOperations():
|
|
from sprinferIndex import patternOperations
|
|
|
|
patternOperations()
|
|
|
|
|
|
def job_patchManyBugs():
|
|
from patchManyBugs import buildAll
|
|
|
|
buildAll()
|
|
|
|
|
|
def job_patchIntro():
|
|
from sprinferIndex import patchCoreIntro
|
|
|
|
patchCoreIntro()
|
|
|
|
|
|
def job_validateIntro():
|
|
from test_patched_file import patch_validate
|
|
|
|
patch_validate()
|
|
|
|
|
|
def job_checkCorrectIntro():
|
|
from test_patched_file import checkCorrect
|
|
|
|
checkCorrect()
|
|
|
|
|
|
def job_manybugs():
|
|
from getManybugs import export
|
|
|
|
export()
|
|
|
|
|
|
def job_validateMany():
|
|
from patch_validate import patch_validate
|
|
|
|
patch_validate()
|
|
|
|
|
|
def job_introclass():
|
|
from getIntroClass import export
|
|
|
|
export()
|
|
|
|
|
|
def job_stats():
|
|
from stats import statsNormal
|
|
|
|
statsNormal(True)
|
|
|
|
|
|
def job_datasetDefects4J():
|
|
from defects4JDataset import core
|
|
|
|
core()
|
|
|
|
|
|
def job_bug():
|
|
from bugstats import bStats
|
|
|
|
bStats()
|
|
|
|
|
|
def job_defects4j():
|
|
from stats import defects4jStats
|
|
|
|
defects4jStats()
|
|
|
|
|
|
def job_patterns():
|
|
from stats import exportAbstractPatterns
|
|
|
|
exportAbstractPatterns()
|
|
|
|
|
|
def job_pipeline():
|
|
fs = [job_dataset4j, job_richedit, job_actionSI, job_compare, job_cluster, job_tokenSI,
|
|
job_compare, job_stats, job_patterns]
|
|
|
|
for i, f in enumerate(fs):
|
|
print(f'Running {i + 1}: {f.__name__}...')
|
|
f()
|
|
|
|
|
|
JOBS = {name[4:]: f for name, f in inspect.getmembers(sys.modules[__name__])
|
|
if inspect.isfunction(f) and name.startswith('job_')}
|
|
|
|
|
|
if __name__ == '__main__':
|
|
args = parse_args()
|
|
setLogg()
|
|
|
|
cfg, _ = setEnv(args)
|
|
|
|
# Parse job
|
|
job: str = args.job.strip()
|
|
if job not in JOBS:
|
|
print(f'Job "{job}" is not supported. Available jobs: {", ".join(JOBS.keys())}')
|
|
exit(-1)
|
|
|
|
from settings import *
|
|
pd.options.mode.chained_assignment = None
|
|
|
|
print(f'Executing {job}...')
|
|
JOBS[job]()
|