git reimport
This commit is contained in:
73
dcj/tool/dcj.py
Normal file
73
dcj/tool/dcj.py
Normal file
@@ -0,0 +1,73 @@
|
||||
"""CLI for local testing of solutions in Distributed Code Jam."""
|
||||
import argparse
|
||||
import os
|
||||
from os import chmod
|
||||
import stat
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from dcj import build
|
||||
from dcj import command_chooser
|
||||
from dcj import configuration
|
||||
from dcj import run
|
||||
from dcj import test
|
||||
|
||||
|
||||
def _print(x):
|
||||
print ' '.join(x)
|
||||
return 0 # Tell tool that command execution was succesfull.
|
||||
|
||||
|
||||
def _subprocess_call_with_error_catching(command):
|
||||
try:
|
||||
subprocess.call(command)
|
||||
return 0
|
||||
except OSError as e:
|
||||
if e.args == (2, 'No such file or directory'):
|
||||
raise ValueError('Command {0} not found.'.format(command[0]))
|
||||
else:
|
||||
raise ValueError(
|
||||
'Error when executing command {0!r}: {1!r}.'.format(command, e))
|
||||
|
||||
|
||||
def _create_script(script_path, content):
|
||||
with open(script_path, 'w') as f:
|
||||
f.write(content)
|
||||
chmod(script_path, stat.S_IRWXU | stat.S_IROTH | stat.S_IXOTH)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(prog='dcj')
|
||||
config = configuration.Configuration()
|
||||
# TODO(jbartosik): allow using different configs.
|
||||
config.Load(
|
||||
os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config.json'))
|
||||
builder = build.Build(config)
|
||||
runner = run.Run(config)
|
||||
tester = test.Tester(builder, runner)
|
||||
chooser = command_chooser.CommandChooser({
|
||||
'build': builder,
|
||||
'run': runner,
|
||||
'test': tester,
|
||||
})
|
||||
chooser.AddToParser(parser)
|
||||
parser.add_argument(
|
||||
'--dry-run',
|
||||
action='store_true',
|
||||
help='Only print commands, don\'t execute them.',
|
||||
default=False)
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.dry_run:
|
||||
builder.SetCommandExecutor(_print)
|
||||
runner.SetCommandExecutor(_print)
|
||||
else:
|
||||
builder.SetCommandExecutor(_subprocess_call_with_error_catching)
|
||||
builder.SetScriptCreator(_create_script)
|
||||
runner.SetCommandExecutor(_subprocess_call_with_error_catching)
|
||||
|
||||
try:
|
||||
chooser.Run(args)
|
||||
except (NotImplementedError, RuntimeError, ValueError) as error:
|
||||
print error
|
||||
sys.exit(1)
|
Reference in New Issue
Block a user