blob: cc99ef3fdfb9b522170248e7e523b51ec1d13f78 [file] [log] [blame] [edit]
"""Collection of utilities to work with gclient."""
from __future__ import absolute_import
import imp
import logging
import os
import pathlib
from helpers import git_utils
_DEPOT_TOOLS_SEARCH_PATHS = [
# Newer containers don't include depot_tools so search for it in the
# manifest. This is the preferred version because it will be pinned on
# release branches and track upstream on master.
pathlib.Path('/workspace/checkout/chromium/tools/depot_tools'),
# Legacy containers have depot_tools installed at this path.
pathlib.Path('/workspace/depot_tools'),
]
def find_depot_tools():
for path in _DEPOT_TOOLS_SEARCH_PATHS:
if path.exists():
return path
raise ValueError('Cannot find a suitable installation of depot_tools')
def disable_depot_tools_auto_update_cmd():
depot_tools_path = find_depot_tools()
return [
'python3',
str(depot_tools_path / 'update_depot_tools_toggle.py'),
'--disable',
]
def gclient_sync_cmd(executor, jobs=None, extra_args=None):
"""Returns the command list to run gclient sync."""
depot_tools_path = find_depot_tools()
logging.info(
'Using depot_tools at %s (%s)',
depot_tools_path,
git_utils.get_head_sha(executor, str(depot_tools_path)),
)
# See go/authenticating-cipd-on-nest-infra for more context on this command.
luci_auth_wrapped_cmd = [
str(depot_tools_path / 'luci-auth'), 'context', '-disable-git-auth', '-service-account-json',
':gce', '--',
str(depot_tools_path / 'gclient'), 'sync', '--force', '--with_branch_heads',
'--delete_unversioned_trees', '--reset'
]
if jobs is not None:
luci_auth_wrapped_cmd.append('--jobs={}'.format(jobs))
if extra_args is not None:
luci_auth_wrapped_cmd.extend(extra_args)
return luci_auth_wrapped_cmd