2015-05-07 00:32:46 -07:00
|
|
|
#! py -3
|
|
|
|
from pathlib import Path
|
2015-05-07 10:54:54 -07:00
|
|
|
import pprint
|
|
|
|
|
|
|
|
|
|
|
|
# def extract(line, token):
|
|
|
|
# tag = line.split(token)[1]
|
|
|
|
# return tag.split("}")[0].strip()
|
|
|
|
|
|
|
|
class Flags:
|
|
|
|
discard = ["{Requires:"]
|
|
|
|
def __init__(self, lines):
|
|
|
|
self.flaglines = []
|
|
|
|
for line in lines:
|
|
|
|
if line.startswith("//"):
|
|
|
|
self.flaglines.append(line)
|
|
|
|
else:
|
|
|
|
break # Only capture top block
|
|
|
|
self.flaglines = [line for line in self.flaglines if line.startswith("// {")]
|
|
|
|
self.flaglines = [line for line in self.flaglines if not [d for d in Flags.discard if d in line]]
|
|
|
|
self.flags = dict()
|
|
|
|
for flag in self.flaglines:
|
|
|
|
flag = flag[flag.index("{") + 1 : flag.index("}")].strip()
|
|
|
|
if ":" in flag:
|
|
|
|
fl, arg = flag.split(":")
|
|
|
|
fl = fl.strip()
|
|
|
|
arg = arg.strip()
|
|
|
|
self.flags[fl] = arg
|
|
|
|
else:
|
|
|
|
self.flags[flag] = None # Make an entry, but no arg
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return pprint.pformat(self.flags)
|
|
|
|
|
|
|
|
def __len__(self):
|
|
|
|
return len(self.flaglines)
|
|
|
|
|
|
|
|
def keys(self):
|
|
|
|
return {key for key in self.flags.keys()}
|
|
|
|
|
|
|
|
def values(self):
|
|
|
|
return str(self.flags.values())
|
|
|
|
|
2015-05-07 11:30:19 -07:00
|
|
|
def jvm_args(self):
|
|
|
|
return self.flags["JVMArgs"] if "JVMArgs" in self.flags else ""
|
|
|
|
|
|
|
|
def cmd_args(self):
|
|
|
|
return " " + self.flags["Args"] if "Args" in self.flags else ""
|
|
|
|
|
2015-05-07 00:32:46 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RunnableFile:
|
2015-05-07 10:54:54 -07:00
|
|
|
|
2015-05-07 00:32:46 -07:00
|
|
|
def __init__(self, path, body):
|
|
|
|
self.path = path
|
|
|
|
self.name = path.stem
|
2015-05-07 10:54:54 -07:00
|
|
|
self.relative = path.relative_to(RunFiles.base)
|
2015-05-07 00:32:46 -07:00
|
|
|
self.body = body
|
|
|
|
self.lines = body.splitlines()
|
2015-05-07 10:54:54 -07:00
|
|
|
self.flags = Flags(self.lines)
|
2015-05-07 11:30:19 -07:00
|
|
|
self._package = ""
|
2015-05-07 10:54:54 -07:00
|
|
|
# self.args = ""
|
|
|
|
# self.jvm_args = ""
|
|
|
|
# self.brace_cmds = ""
|
2015-05-07 00:32:46 -07:00
|
|
|
for line in self.lines:
|
2015-05-07 10:54:54 -07:00
|
|
|
# if "{Args:" in line:
|
|
|
|
# self.args = extract(line,"{Args:")
|
|
|
|
# if "{JVMArgs:" in line:
|
|
|
|
# self.jvm_args = extract(line,"{JVMArgs:") + " "
|
2015-05-07 00:32:46 -07:00
|
|
|
if line.startswith("package "):
|
2015-05-07 11:30:19 -07:00
|
|
|
self._package = line.split("package ")[1].strip()[:-1]
|
|
|
|
if self._package.replace('.', '/') not in self.lines[0]:
|
|
|
|
self._package = ""
|
2015-05-07 10:54:54 -07:00
|
|
|
# if line.startswith("// {"):
|
|
|
|
# self.brace_cmds += line + "\n"
|
2015-05-07 00:32:46 -07:00
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return str(self.relative) + "\n" #+ self.header
|
|
|
|
|
2015-05-07 11:30:19 -07:00
|
|
|
def package(self):
|
|
|
|
return self._package + '.' if self._package else ''
|
2015-05-07 00:32:46 -07:00
|
|
|
|
|
|
|
def runCommand(self):
|
2015-05-07 11:30:19 -07:00
|
|
|
return "[" + str(self.path.parent) + "] java " + self.flags.jvm_args() + self.package() + self.name + self.flags.cmd_args()
|
2015-05-07 00:32:46 -07:00
|
|
|
|
|
|
|
|
2015-05-07 10:54:54 -07:00
|
|
|
class RunFiles:
|
2015-05-07 11:30:19 -07:00
|
|
|
base = Path(".")
|
2015-05-07 10:54:54 -07:00
|
|
|
def __init__(self):
|
|
|
|
self.runFiles = []
|
|
|
|
for java in RunFiles.base.rglob("*.java"):
|
|
|
|
with java.open() as code:
|
|
|
|
body = code.read()
|
|
|
|
if "static void main(String[] args)" in body:
|
|
|
|
self.runFiles.append(RunnableFile(java, body))
|
|
|
|
|
|
|
|
def allFlagKeys(self):
|
|
|
|
flagkeys = set()
|
|
|
|
for f in [f for f in self.runFiles if f.flags]:
|
|
|
|
[flagkeys.add(key) for key in f.flags.keys()]
|
|
|
|
return flagkeys
|
|
|
|
|
|
|
|
def allFlagValues(self):
|
|
|
|
return [f.flags.values() for f in self.runFiles if f.flags if f.flags.values()]
|
|
|
|
|
|
|
|
def allFlags(self):
|
|
|
|
return [f.flags for f in self.runFiles if f.flags]
|
|
|
|
|
|
|
|
def runCommands(self):
|
|
|
|
return [f.runCommand() for f in self.runFiles]
|
2015-05-07 00:32:46 -07:00
|
|
|
|
2015-05-07 10:54:54 -07:00
|
|
|
if __name__ == '__main__':
|
2015-05-07 11:30:19 -07:00
|
|
|
assert Path.cwd().stem is "ExtractedExamples"
|
2015-05-07 10:54:54 -07:00
|
|
|
runFiles = RunFiles()
|
|
|
|
pprint.pprint(runFiles.allFlags())
|
|
|
|
pprint.pprint(runFiles.runCommands())
|
2015-05-07 00:32:46 -07:00
|
|
|
|
|
|
|
|