#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2019 The ChromiumOS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Clones helper scripts into chromiumos-overlay.

Some files in here also need to live in chromiumos-overlay (e.g., the
patch_manager ones). This script simplifies the copying of those around.
"""

# Necessary until crbug.com/1006448 is fixed
from __future__ import print_function

import argparse
import os
import shutil
import sys


def _find_repo_root(script_root):
  repo_root = os.path.abspath(os.path.join(script_root, '../../../../'))
  if not os.path.isdir(os.path.join(repo_root, '.repo')):
    return None
  return repo_root


def main():
  parser = argparse.ArgumentParser(description=__doc__)
  parser.add_argument(
      '--chroot_path',
      help="Path to where CrOS' source tree lives. Will autodetect if you're "
      'running this from inside the CrOS source tree.')
  args = parser.parse_args()

  my_dir = os.path.abspath(os.path.dirname(__file__))

  repo_root = args.chroot_path
  if repo_root is None:
    repo_root = _find_repo_root(my_dir)
    if repo_root is None:
      sys.exit("Couldn't detect the CrOS checkout root; please provide a "
               'value for --chroot_path')

  chromiumos_overlay = os.path.join(repo_root,
                                    'src/third_party/chromiumos-overlay')

  clone_files = [
      'failure_modes.py',
      'get_llvm_hash.py',
      'git_llvm_rev.py',
      'patch_manager.py',
      'subprocess_helpers.py',
  ]

  filesdir = os.path.join(chromiumos_overlay,
                          'sys-devel/llvm/files/patch_manager')
  for f in clone_files:
    source = os.path.join(my_dir, f)
    dest = os.path.join(filesdir, f)
    print('%r => %r' % (source, dest))
    shutil.copyfile(source, dest)


if __name__ == '__main__':
  main()
