#!/usr/bin/env python3

# Copyright 2023 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Pushes changes to test262 inside V8 to the upstream repo."""

from argparse import ArgumentParser
from pathlib import Path
import sys


def main():
  parser = ArgumentParser()
  parser.add_argument(
      '-t',
      '--blink-tools-path',
      help=("Absolute path to where blink tools are located "
            "(usually inside a local chromium checkout)."))
  parser.add_argument(
      '--config-path',
      help="Absolute path to a project configuration json file.",
      default=(Path(__file__).parent / 'v8configs.json'))
  parser.add_argument(
      '--phase',
      help=("Phase of the import process to run. One of 'ALL', 'PREBUILD', "
            "'POSTBUILD', 'UPLOAD'. ALL will run all phases; suitable for "
            "local runs. PREBUILD and POSTBUILD are to be used when building "
            "and running the tests is delegated to a proper builder. UPLOAD is "
            "used for creating and uploading the CL for the import. UPLOAD is "
            "deferred to the recipe on the import builder. This importer "
            "script gets called twice on the builder, first with PREBUILD and "
            "second with POSTBUILD. Build and UPLOAD phases are deferred to "
            "the recipe on the builder."),
      choices=['ALL', 'PREBUILD', 'POSTBUILD', 'UPLOAD'],
      default='ALL')
  parser.add_argument(
      '--test262-failure-file',
      help=('Absolute path to a file with names of the test to be skipped for '
            'this import. Used only in PREBUILD phase.'),
      default=None)
  parser.add_argument(
      '--v8-test262-last-revision',
      help=('Used only in POSTBUILD when called separately. The old revision was'
            ' overwritten at this point by the PREBUILD phase.'),
      default=None)
  args, exporter_args = parser.parse_known_args(sys.argv)

  sys.path.append(args.blink_tools_path)
  from blinkpy.common import exit_codes
  from blinkpy.common.host import Host
  from blinkpy.common.path_finder import add_depot_tools_dir_to_os_path

  from v8configs import config_from_file
  from v8_importer import V8TestImporter

  add_depot_tools_dir_to_os_path()
  host = Host(project_config_factory=config_from_file(args.config_path))
  importer = V8TestImporter(
      phase=args.phase,
      host=host,
      test262_failure_file=args.test262_failure_file,
      v8_test262_last_rev=args.v8_test262_last_revision)
  try:
    success = importer.main(exporter_args[1:])
    host.exit(0 if success else 1)
  except KeyboardInterrupt:
    host.print_('Interrupted, exiting')
    host.exit(exit_codes.INTERRUPTED_EXIT_STATUS)


if __name__ == '__main__':
  main()