# -*- coding: utf-8 -*-
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Test archive creation service.

The CI system requires archives of autotest files for a number of stages.
This service handles the creation of those archives.
"""

from __future__ import print_function

from chromite.lib import cros_build_lib
from chromite.lib.api import test_archive


def CreateHwTestArchives(input_proto, output_proto):
  """Create the HW Test archives.

  Args:
    input_proto (CreateArchiveRequest): The input arguments message.
    output_proto (CreateArchiveResponse): The empty output message.
  """
  board = input_proto.build_target.name
  output_dir = input_proto.output_directory

  if not board:
    cros_build_lib.Die('A build target name is required.')
  if not output_dir:
    cros_build_lib.Die('An output directory must be specified.')

  try:
    files = test_archive.CreateHwTestArchives(board, output_dir)
  except test_archive.ArchiveBaseDirNotFound as e:
    cros_build_lib.Die(e.message)

  for current in files.values():
    new_file = output_proto.files.add()
    new_file.path = current
