#!/usr/bin/env python3
# Copyright 2020 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.

"""Wrapper around repo to auto-update depot_tools during sync.

gclient keeps depot_tools up-to-date automatically for Chromium developers.

We only want to do this on `repo sync` operations as that implies a network
operation, and update_depot_tools is not cheap.
"""

import os
from pathlib import Path
import subprocess
import sys


# Some useful paths.
DEPOT_TOOLS_DIR = Path(__file__).resolve().parent
UPDATE_DEPOT_TOOLS = DEPOT_TOOLS_DIR / 'update_depot_tools'
REPO = DEPOT_TOOLS_DIR / 'repo_launcher'


def _UpdateDepotTools():
  """Help CrOS users keep their depot_tools checkouts up-to-date."""
  if os.getenv('DEPOT_TOOLS_UPDATE') == '0':
    return

  # We don't update the copy that's part of the CrOS repo client checkout.
  path = DEPOT_TOOLS_DIR
  while path != path.parent:
    if (path / '.repo').is_dir() and (path / 'chromite').is_dir():
      return
    path = path.parent

  if UPDATE_DEPOT_TOOLS.exists():
    subprocess.run([UPDATE_DEPOT_TOOLS], check=True)
  else:
    print('warning: %s does not exist; export DEPOT_TOOLS_UPDATE=0 to disable.'
          % (UPDATE_DEPOT_TOOLS,), file=sys.stderr)


def main(argv):
  # This is a bit hacky, but should be "good enough".  If repo itself gains
  # support for sync hooks, we could switch to that.
  if argv and argv[0] == 'sync':
    _UpdateDepotTools()

  os.execv(REPO, [sys.argv[0]] + argv)


if __name__ == '__main__':
  sys.exit(main(sys.argv[1:]))
