blob: 803d416296986758866361ffdf904c0ccac87222 [file] [log] [blame]
# Copyright (C) 2018 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
from . import *
from .. import *
from .. import utils
from ..request_types import *
import os
import shutil
import subprocess
def run(build_dirs, requests, common_vars, **kwargs):
for bd in build_dirs:
os.makedirs(bd.format(**common_vars), exist_ok=True)
for request in requests:
status = run_helper(request, common_vars, **kwargs)
if status != 0:
print("!!! ERROR executing above command line: exit code %d" % status)
return 1
print("All data build commands executed")
return 0
def run_helper(request, common_vars, is_windows, tool_dir, tool_cfg=None, **kwargs):
if isinstance(request, PrintFileRequest):
output_path = "{DIRNAME}/{FILENAME}".format(
DIRNAME = utils.dir_for(request.output_file).format(**common_vars),
FILENAME = request.output_file.filename,
)
print("Printing to file: %s" % output_path)
with open(output_path, "w") as f:
f.write(request.content)
return 0
if isinstance(request, CopyRequest):
input_path = "{DIRNAME}/{FILENAME}".format(
DIRNAME = utils.dir_for(request.input_file).format(**common_vars),
FILENAME = request.input_file.filename,
)
output_path = "{DIRNAME}/{FILENAME}".format(
DIRNAME = utils.dir_for(request.output_file).format(**common_vars),
FILENAME = request.output_file.filename,
)
print("Copying file to: %s" % output_path)
shutil.copyfile(input_path, output_path)
return 0
if isinstance(request, VariableRequest):
# No-op
return 0
assert isinstance(request.tool, IcuTool)
if is_windows:
cmd_template = "{TOOL_DIR}/{TOOL}/{TOOL_CFG}/{TOOL}.exe {{ARGS}}".format(
TOOL_DIR = tool_dir,
TOOL_CFG = tool_cfg,
TOOL = request.tool.name,
**common_vars
)
else:
cmd_template = "{TOOL_DIR}/{TOOL} {{ARGS}}".format(
TOOL_DIR = tool_dir,
TOOL = request.tool.name,
**common_vars
)
if isinstance(request, RepeatedExecutionRequest):
for loop_vars in utils.repeated_execution_request_looper(request):
command_line = utils.format_repeated_request_command(
request,
cmd_template,
loop_vars,
common_vars
)
if is_windows:
# Note: this / to \ substitution may be too aggressive?
command_line = command_line.replace("/", "\\")
print("Running: %s" % command_line)
res = subprocess.run(command_line, shell=True)
if res.returncode != 0:
return res.returncode
return 0
if isinstance(request, SingleExecutionRequest):
command_line = utils.format_single_request_command(
request,
cmd_template,
common_vars
)
if is_windows:
# Note: this / to \ substitution may be too aggressive?
command_line = command_line.replace("/", "\\")
print("Running: %s" % command_line)
res = subprocess.run(command_line, shell=True)
return res.returncode
assert False