You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
#!/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
|
|
|
|
import gclient_utils
|
|
|
|
# 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
|
|
if (path / '.citc').is_dir():
|
|
return
|
|
path = path.parent
|
|
|
|
if UPDATE_DEPOT_TOOLS.exists():
|
|
subprocess.run([UPDATE_DEPOT_TOOLS], check=True)
|
|
else:
|
|
print(
|
|
f'warning: {UPDATE_DEPOT_TOOLS} does not exist; export '
|
|
'DEPOT_TOOLS_UPDATE=0 to disable.',
|
|
file=sys.stderr)
|
|
|
|
|
|
def main(argv):
|
|
if gclient_utils.IsEnvCog():
|
|
print('"repo" is not supported in non-git environment.',
|
|
file=sys.stderr)
|
|
return 1
|
|
# 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(sys.executable, [sys.executable, str(REPO)] + argv)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv[1:]))
|