Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1084)

Unified Diff: clang_format.py

Issue 134313007: Depot tools: use the clang-format binaries that are now included (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Fixed gclient_utils_test.py Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « clang-format.bat ('k') | gclient_utils.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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))
« no previous file with comments | « clang-format.bat ('k') | gclient_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698