| Index: clang_format.py
|
| diff --git a/clang_format.py b/clang_format.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..27539f86da08e0a37a2cde8e6638340797b6b608
|
| --- /dev/null
|
| +++ b/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))
|
|
|