Depot tools: use the clang-format binaries that are now included
as part of the Chromium checkout. This follows the approach used by gn. Changes include: - in-the-PATH clang-format trampoline scripts - clang_format.py, which finds clang-format binaries inside of Chrome - Hook 'git cl format' to the new binaries and scripts - Rearrange some code, for reuse between clang_format.py and gn.py BUG=240309 TEST=presubmits (one failure on mac, but it fails on a clean checkout too) Review URL: https://codereview.chromium.org/134313007 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@245074 0039d316-1c4b-4281-b951-d872f2087c98experimental/szager/collated-output
parent
9eabb22cc8
commit
3ac1c4e320
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright 2014 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
base_dir=$(dirname "$0")
|
||||
|
||||
PYTHONDONTWRITEBYTECODE=1 exec python "$base_dir/clang_format.py" "$@"
|
@ -0,0 +1,10 @@
|
||||
@echo off
|
||||
:: Copyright 2014 The Chromium Authors. All rights reserved.
|
||||
:: Use of this source code is governed by a BSD-style license that can be
|
||||
:: found in the LICENSE file.
|
||||
|
||||
:: This is required with cygwin only.
|
||||
PATH=%~dp0;%PATH%
|
||||
|
||||
:: Defer control.
|
||||
%~dp0python "%~dp0\clang_format.py" %*
|
@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2014 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""Redirects to the version of clang-format checked into the Chrome tree.
|
||||
|
||||
clang-format binaries are pulled down from Google Cloud Storage whenever you
|
||||
sync Chrome, to platform-specific locations. This script knows how to locate
|
||||
those tools, assuming the script is invoked from inside a Chromium checkout."""
|
||||
|
||||
import gclient_utils
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
class NotFoundError(Exception):
|
||||
"""A file could not be found."""
|
||||
def __init__(self, e):
|
||||
Exception.__init__(self,
|
||||
'Problem while looking for clang-format in Chromium source tree:\n'
|
||||
' %s' % e)
|
||||
|
||||
|
||||
def _FindChromiumTree():
|
||||
"""Return the root of the current chromium checkout, or die trying."""
|
||||
source_root = gclient_utils.FindFileUpwards('.gclient')
|
||||
if not source_root:
|
||||
raise NotFoundError(
|
||||
'.gclient file not found in any parent of the current path.')
|
||||
return source_root
|
||||
|
||||
|
||||
def FindClangFormatToolInChromiumTree():
|
||||
"""Return a path to the clang-format executable, or die trying."""
|
||||
# The binaries in platform-specific subdirectories in src/tools/gn/bin.
|
||||
tool_path = os.path.join(_FindChromiumTree(), 'src', 'third_party',
|
||||
'clang_format', 'bin',
|
||||
gclient_utils.GetMacWinOrLinux(),
|
||||
'clang-format' + gclient_utils.GetExeSuffix())
|
||||
if not os.path.exists(tool_path):
|
||||
# TODO(nick): After March 2014, eliminate the following advisory.
|
||||
error_text = '''\n GIT CL FORMAT - WINTER WEATHER ADVISORY
|
||||
|
||||
clang-format binaries now come with every Chrome checkout!
|
||||
|
||||
Unfortunately, your depot_tools scripts tried to find clang-format binaries
|
||||
in your Chrome checkout, but failed. This is expected if you haven't synced
|
||||
since the binaries were added.
|
||||
|
||||
'git cl format' will probably not work until you sync your Chrome tree.
|
||||
Sorry about that.
|
||||
|
||||
Contact nick@chromium.org if you have any additional questions.\n\n'''
|
||||
|
||||
error_text += 'File does not exist: %s' % tool_path
|
||||
|
||||
raise NotFoundError(error_text)
|
||||
return tool_path
|
||||
|
||||
|
||||
def FindClangFormatScriptInChromiumTree(script_name):
|
||||
"""Return a path to a clang-format helper script, or die trying."""
|
||||
# The binaries in platform-specific subdirectories in src/tools/gn/bin.
|
||||
script_path = os.path.join(_FindChromiumTree(), 'src', 'third_party',
|
||||
'clang_format', 'scripts', script_name)
|
||||
if not os.path.exists(script_path):
|
||||
raise NotFoundError('File does not exist: %s' % script_path)
|
||||
return script_path
|
||||
|
||||
|
||||
def main(args):
|
||||
try:
|
||||
tool = FindClangFormatToolInChromiumTree()
|
||||
except NotFoundError, e:
|
||||
print >> sys.stderr, e
|
||||
sys.exit(1)
|
||||
|
||||
# Add some visibility to --help showing where the tool lives, since this
|
||||
# redirection can be a little opaque.
|
||||
help_syntax = ('-h', '--help', '-help', '-help-list', '--help-list')
|
||||
if any(match in args for match in help_syntax):
|
||||
print '\nDepot tools redirects you to the clang-format at:\n %s\n' % tool
|
||||
|
||||
return subprocess.call([tool] + sys.argv[1:])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(sys.argv))
|
Loading…
Reference in New Issue