blob: 785ce2e95484605e282714c3a6d1e3df33acdf12 [file] [log] [blame]
import os
import util
FIDLC_REGEN = 'zircon/tools/fidl/testdata/regen.sh'
FIDLGEN_REGEN = 'garnet/go/src/fidl/compiler/backend/typestest/regen.sh'
FIDLDOC_REGEN = 'REGENERATE_GOLDENS_FOLDER=$FUCHSIA_DIR/tools/fidl/fidldoc/src/templates/markdown/testdata fx test host_x64/fidldoc_bin_test -- golden_test'
FIDLGEN_DART_REGEN = 'topaz/bin/fidlgen_dart/regen.sh'
GO_BINDINGS_REGEN = 'third_party/go/regen-fidl'
def regen_fidlc_goldens(build_first, dry_run):
if build_first:
util.run(util.BUILD_FIDLC, dry_run, exit_on_failure=True)
util.run(path_to_regen_command(FIDLC_REGEN), dry_run, exit_on_failure=True)
def regen_fidlgen_goldens(build_first, dry_run):
if build_first:
util.run(util.BUILD_FIDLGEN, dry_run, exit_on_failure=True)
util.run(
path_to_regen_command(FIDLGEN_REGEN), dry_run, exit_on_failure=True)
def regen_fidldoc_goldens(build_first, dry_run):
util.run(FIDLDOC_REGEN, dry_run, exit_on_failure=True)
def regen_fidlgendart_goldens(build_first, dry_run):
if build_first:
util.run(util.BUILD_FIDLGEN_DART, dry_run, exit_on_failure=True)
util.run(
path_to_regen_command(FIDLGEN_DART_REGEN),
dry_run,
exit_on_failure=True)
def regen_go_bindings(build_first, dry_run, exit_on_failure=True):
util.run(
path_to_regen_command(GO_BINDINGS_REGEN), dry_run, exit_on_failure=True)
def path_to_regen_command(path):
return ['fx', 'exec', os.path.join(util.FUCHSIA_DIR, path)]
def is_ir_changed():
for path in util.get_changed_files():
if path.startswith(
util.FIDLC_DIR) and path.endswith('.test.json.golden'):
return True
return False
def is_go_bindings_changed():
for path in util.get_changed_files():
if path.startswith(
util.FIDLGEN_GOLDENS_DIR) and path.endswith('.test.json.go.golden'):
return True
return False
REGEN_TARGETS = [
('fidlc', regen_fidlc_goldens),
('fidlgen', regen_fidlgen_goldens),
('fidldoc', regen_fidldoc_goldens),
('fidlgen_dart', regen_fidlgendart_goldens),
('go', regen_go_bindings),
]
def regen_explicit(targets, build_first, dry_run):
for target, func in REGEN_TARGETS:
if target in targets or 'all' in targets:
func(build_first, dry_run)
def regen_changed(changed_files, build_first, dry_run):
regen_fidlc = False
regen_fidlgen = False
regen_fidldoc = False
regen_fidlgendart = False
regen_go = False
for file_ in changed_files:
if file_.startswith(util.FIDLC_DIR):
regen_fidlc = True
if is_in_fidlgen_backend(file_):
regen_fidlgen = True
if file_.startswith(util.FIDLDOC_DIR):
regen_fidldoc = True
if file_.startswith(util.FIDLGEN_DART_DIR):
regen_fidlgendart = True
if file_.startswith(util.FIDLGEN_GO_DIR):
regen_go = True
if regen_fidlc:
regen_fidlc_goldens(build_first, dry_run)
if dry_run or is_ir_changed():
regen_fidlgen = True
regen_fidldoc = True
regen_fidlgendart = True
if regen_fidlgen:
regen_fidlgen_goldens(build_first, dry_run)
if dry_run or is_go_bindings_changed():
regen_go = True
if regen_fidldoc:
regen_fidldoc_goldens(build_first, dry_run)
if regen_fidlgendart:
regen_fidlgendart_goldens(build_first, dry_run)
if regen_go:
regen_go_bindings(build_first, dry_run)
def is_in_fidlgen_backend(path):
return any(path.startswith(b) for b in util.FIDLGEN_BACKEND_DIRS)