Commit 6eabd70a authored by cmp@chromium.org's avatar cmp@chromium.org

Revert 244398 "Revert of https://codereview.chromium.org/111953007/"

> Revert of https://codereview.chromium.org/111953007/
> Reason for revert: Broke Linux build in http://build.chromium.org/p/chromium/builders/Linux/builds/46507.
> 
> TBR=thakis@chromium.org,ajwong@chromium.org,brettw@chromium.org,phajdan.jr@chromium.org,nick@chromium.org
> NOTREECHECKS=true
> NOTRY=true
> BUG=240309
> 
> Review URL: https://codereview.chromium.org/135773002

The original patch didn't set props correctly.  thakis landed a separate
change to fix that.  The revert of this revert in Rietveld failed at
https://codereview.chromium.org/135773003/.

TBR=cmp@chromium.org

Review URL: https://codereview.chromium.org/135793002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@244400 0039d316-1c4b-4281-b951-d872f2087c98
parent 36bcda8c
......@@ -198,6 +198,8 @@ v8.log
/third_party/chromeos_login_manager
/third_party/chromeos_text_input
/third_party/chromite
/third_party/clang_format/bin/*/*
!/third_party/clang_format/bin/*/*.sha1
/third_party/cld_2/src
/third_party/cros
/third_party/cros_dbus_cplusplus/source
......
......@@ -706,6 +706,40 @@ hooks = [
"-s", "src/tools/gn/bin/linux/gn32.sha1",
],
},
# Pull clang-format binaries using checked-in hashes.
{
"name": "clang_format_win",
"pattern": "src/third_party/clang_format/bin/win/clang-format.exe.sha1",
"action": [ "download_from_google_storage",
"--no_resume",
"--platform=win32",
"--no_auth",
"--bucket", "chromium-clang-format",
"-s", "src/third_party/clang_format/bin/win/clang-format.exe.sha1",
],
},
{
"name": "clang_format_mac",
"pattern": "src/third_party/clang_format/bin/mac/clang-format.sha1",
"action": [ "download_from_google_storage",
"--no_resume",
"--platform=darwin",
"--no_auth",
"--bucket", "chromium-clang-format",
"-s", "src/third_party/clang_format/bin/mac/clang-format.sha1",
],
},
{
"name": "clang_format_linux",
"pattern": "src/third_party/clang_format/bin/linux/clang-format.sha1",
"action": [ "download_from_google_storage",
"--no_resume",
"--platform=linux*",
"--no_auth",
"--bucket", "chromium-clang-format",
"-s", "src/third_party/clang_format/bin/linux/clang-format.sha1",
],
},
{
# A change to a .gyp, .gypi, or to GYP itself should run the generator.
"name": "gyp",
......
Name: clang-format
Short Name: clang-format
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/
Version: 3.5
Date: 8 January 2014
Revision: 198831
License: University of Illinois/NCSA Open Source License
License File: NOT_SHIPPED
Security Critical: No
Description:
A tool for formatting C++ code to style.
Local Modifications:
None
This folder contains clang-format binaries. The binaries will be automatically
downloaded from Google Storage by gclient runhooks for the current platform.
For a walkthrough on how to maintain these binaries:
https://code.google.com/p/chromium/wiki/UpdatingClangFormatBinaries
To upload a file:
python ~/depot_tools/upload_to_google_storage.py -b chromium-clang-format <FILENAME>
To download a file given a .sha1 file:
python ~/depot_tools/download_from_google_storage.py -b chromium-clang-format -s <FILENAME>.sha1
List the contents of GN's Google Storage bucket:
python ~/depot_tools/third_party/gsutil/gsutil ls gs://chromium-clang-format/
To initialize gsutil's credentials:
python ~/depot_tools/third_party/gsutil/gsutil config
That will give a URL which you should log into with your web browser. The
username should be the one that is on the ACL for the "chromium-clang-format"
bucket (probably your @google.com address). Contact the build team for help
getting access if necessary.
Copy the code back to the command line util. Ignore the project ID (it's OK
to just leave blank when prompted).
gsutil documentation:
https://developers.google.com/storage/docs/gsutil
ee0117f00e70c8cbaa780fc95b55754fc5a3bd06
\ No newline at end of file
bc7ce933f91ecf1ef08284421b1ff9617fad5d9a
\ No newline at end of file
ab07bc6cc1f91c920da95603a63cc8fdfc2f33d8
\ No newline at end of file
-- In this file, change "/path/to/" to the path where you installed clang-format
-- and save it to ~/Library/Application Support/BBEdit/Scripts. You can then
-- select the script from the Script menu and clang-format will format the
-- selection. Note that you can rename the menu item by renaming the script, and
-- can assign the menu item a keyboard shortcut in the BBEdit preferences, under
-- Menus & Shortcuts.
on urlToPOSIXPath(theURL)
return do shell script "python -c \"import urllib, urlparse, sys; print urllib.unquote(urlparse.urlparse(sys.argv[1])[2])\" " & quoted form of theURL
end urlToPOSIXPath
tell application "BBEdit"
set selectionOffset to characterOffset of selection
set selectionLength to length of selection
set fileURL to URL of text document 1
end tell
set filePath to urlToPOSIXPath(fileURL)
set newContents to do shell script "/path/to/clang-format -offset=" & selectionOffset & " -length=" & selectionLength & " " & quoted form of filePath
tell application "BBEdit"
-- "set contents of text document 1 to newContents" scrolls to the bottom while
-- replacing a selection flashes a bit but doesn't affect the scroll position.
set currentLength to length of contents of text document 1
select characters 1 thru currentLength of text document 1
set text of selection to newContents
select characters selectionOffset thru (selectionOffset + selectionLength - 1) of text document 1
end tell
#!/usr/bin/python
#
#===- clang-format-diff.py - ClangFormat Diff Reformatter ----*- python -*--===#
#
# The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
#===------------------------------------------------------------------------===#
r"""
ClangFormat Diff Reformatter
============================
This script reads input from a unified diff and reformats all the changed
lines. This is useful to reformat all the lines touched by a specific patch.
Example usage for git users:
git diff -U0 HEAD^ | clang-format-diff.py -p1 -i
"""
import argparse
import difflib
import re
import string
import subprocess
import StringIO
import sys
# Change this to the full path if clang-format is not on the path.
binary = 'clang-format'
def main():
parser = argparse.ArgumentParser(description=
'Reformat changed lines in diff. Without -i '
'option just output the diff that would be '
'introduced.')
parser.add_argument('-i', action='store_true', default=False,
help='apply edits to files instead of displaying a diff')
parser.add_argument('-p', metavar='NUM', default=0,
help='strip the smallest prefix containing P slashes')
parser.add_argument('-regex', metavar='PATTERN', default=None,
help='custom pattern selecting file paths to reformat '
'(case sensitive, overrides -iregex)')
parser.add_argument('-iregex', metavar='PATTERN', default=
r'.*\.(cpp|cc|c\+\+|cxx|c|cl|h|hpp|m|mm|inc|js)',
help='custom pattern selecting file paths to reformat '
'(case insensitive, overridden by -regex)')
parser.add_argument(
'-style',
help=
'formatting style to apply (LLVM, Google, Chromium, Mozilla, WebKit)')
args = parser.parse_args()
# Extract changed lines for each file.
filename = None
lines_by_file = {}
for line in sys.stdin:
match = re.search('^\+\+\+\ (.*?/){%s}(\S*)' % args.p, line)
if match:
filename = match.group(2)
if filename == None:
continue
if args.regex is not None:
if not re.match('^%s$' % args.regex, filename):
continue
else:
if not re.match('^%s$' % args.iregex, filename, re.IGNORECASE):
continue
match = re.search('^@@.*\+(\d+)(,(\d+))?', line)
if match:
start_line = int(match.group(1))
line_count = 1
if match.group(3):
line_count = int(match.group(3))
if line_count == 0:
continue
end_line = start_line + line_count - 1;
lines_by_file.setdefault(filename, []).extend(
['-lines', str(start_line) + ':' + str(end_line)])
# Reformat files containing changes in place.
for filename, lines in lines_by_file.iteritems():
command = [binary, filename]
if args.i:
command.append('-i')
command.extend(lines)
if args.style:
command.extend(['-style', args.style])
p = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=None, stdin=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode != 0:
sys.exit(p.returncode);
if not args.i:
with open(filename) as f:
code = f.readlines()
formatted_code = StringIO.StringIO(stdout).readlines()
diff = difflib.unified_diff(code, formatted_code,
filename, filename,
'(before formatting)', '(after formatting)')
diff_string = string.join(diff, '')
if len(diff_string) > 0:
sys.stdout.write(diff_string)
if __name__ == '__main__':
main()
# This file is a minimal clang-format sublime-integration. To install:
# - Change 'binary' if clang-format is not on the path (see below).
# - Put this file into your sublime Packages directory, e.g. on Linux:
# ~/.config/sublime-text-2/Packages/User/clang-format-sublime.py
# - Add a key binding:
# { "keys": ["ctrl+shift+c"], "command": "clang_format" },
#
# With this integration you can press the bound key and clang-format will
# format the current lines and selections for all cursor positions. The lines
# or regions are extended to the next bigger syntactic entities.
#
# It operates on the current, potentially unsaved buffer and does not create
# or save any files. To revert a formatting, just undo.
from __future__ import print_function
import sublime
import sublime_plugin
import subprocess
# Change this to the full path if clang-format is not on the path.
binary = 'clang-format'
# Change this to format according to other formatting styles. See the output of
# 'clang-format --help' for a list of supported styles. The default looks for
# a '.clang-format' or '_clang-format' file to indicate the style that should be
# used.
style = 'file'
class ClangFormatCommand(sublime_plugin.TextCommand):
def run(self, edit):
encoding = self.view.encoding()
if encoding == 'Undefined':
encoding = 'utf-8'
regions = []
command = [binary, '-style', style]
for region in self.view.sel():
regions.append(region)
region_offset = min(region.a, region.b)
region_length = abs(region.b - region.a)
command.extend(['-offset', str(region_offset),
'-length', str(region_length),
'-assume-filename', str(self.view.file_name())])
old_viewport_position = self.view.viewport_position()
buf = self.view.substr(sublime.Region(0, self.view.size()))
p = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stdin=subprocess.PIPE)
output, error = p.communicate(buf.encode(encoding))
if error:
print(error)
self.view.replace(
edit, sublime.Region(0, self.view.size()),
output.decode(encoding))
self.view.sel().clear()
for region in regions:
self.view.sel().add(region)
# FIXME: Without the 10ms delay, the viewport sometimes jumps.
sublime.set_timeout(lambda: self.view.set_viewport_position(
old_viewport_position, False), 10)
;;; Clang-format emacs integration for use with C/Objective-C/C++.
;; This defines a function clang-format-region that you can bind to a key.
;; A minimal .emacs would contain:
;;
;; (load "<path-to-clang>/tools/clang-format/clang-format.el")
;; (global-set-key [C-M-tab] 'clang-format-region)
;;
;; Depending on your configuration and coding style, you might need to modify
;; 'style' in clang-format, below.
(require 'json)
;; *Location of the clang-format binary. If it is on your PATH, a full path name
;; need not be specified.
(defvar clang-format-binary "clang-format")
(defun clang-format-region ()
"Use clang-format to format the currently active region."
(interactive)
(let ((beg (if mark-active
(region-beginning)
(min (line-beginning-position) (1- (point-max)))))
(end (if mark-active
(region-end)
(line-end-position))))
(clang-format beg end)))
(defun clang-format-buffer ()
"Use clang-format to format the current buffer."
(interactive)
(clang-format (point-min) (point-max)))
(defun clang-format (begin end)
"Use clang-format to format the code between BEGIN and END."
(let* ((orig-windows (get-buffer-window-list (current-buffer)))
(orig-window-starts (mapcar #'window-start orig-windows))
(orig-point (point))
(style "file"))
(unwind-protect
(call-process-region (point-min) (point-max) clang-format-binary
t (list t nil) nil
"-offset" (number-to-string (1- begin))
"-length" (number-to-string (- end begin))
"-cursor" (number-to-string (1- (point)))
"-assume-filename" (buffer-file-name)
"-style" style)
(goto-char (point-min))
(let ((json-output (json-read-from-string
(buffer-substring-no-properties
(point-min) (line-beginning-position 2)))))
(delete-region (point-min) (line-beginning-position 2))
(goto-char (1+ (cdr (assoc 'Cursor json-output))))
(dotimes (index (length orig-windows))
(set-window-start (nth index orig-windows)
(nth index orig-window-starts)))))))
# This file is a minimal clang-format vim-integration. To install:
# - Change 'binary' if clang-format is not on the path (see below).
# - Add to your .vimrc:
#
# map <C-I> :pyf <path-to-this-file>/clang-format.py<CR>
# imap <C-I> <ESC>:pyf <path-to-this-file>/clang-format.py<CR>i
#
# The first line enables clang-format for NORMAL and VISUAL mode, the second
# line adds support for INSERT mode. Change "C-I" to another binding if you
# need clang-format on a different key (C-I stands for Ctrl+i).
#
# With this integration you can press the bound key and clang-format will
# format the current line in NORMAL and INSERT mode or the selected region in
# VISUAL mode. The line or region is extended to the next bigger syntactic
# entity.
#
# It operates on the current, potentially unsaved buffer and does not create
# or save any files. To revert a formatting, just undo.
import difflib
import json
import subprocess
import sys
import vim
# Change this to the full path if clang-format is not on the path.
binary = 'clang-format'
# Change this to format according to other formatting styles. See the output of
# 'clang-format --help' for a list of supported styles. The default looks for
# a '.clang-format' or '_clang-format' file to indicate the style that should be
# used.
style = 'file'
# Get the current text.
buf = vim.current.buffer
text = '\n'.join(buf)
# Determine range to format.
cursor = int(vim.eval('line2byte(line("."))+col(".")')) - 2
lines = '%s:%s' % (vim.current.range.start + 1, vim.current.range.end + 1)
# Avoid flashing an ugly, ugly cmd prompt on Windows when invoking clang-format.
startupinfo = None
if sys.platform.startswith('win32'):
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
# Call formatter.
command = [binary, '-lines', lines, '-style', style, '-cursor', str(cursor)]
if vim.current.buffer.name:
command.extend(['-assume-filename', vim.current.buffer.name])
p = subprocess.Popen(command,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=subprocess.PIPE, startupinfo=startupinfo)
stdout, stderr = p.communicate(input=text)
# If successful, replace buffer contents.
if stderr:
message = stderr.splitlines()[0]
parts = message.split(' ', 2)
if len(parts) > 2:
message = parts[2]
print 'Formatting failed: %s (total %d warnings, %d errors)' % (
message, stderr.count('warning:'), stderr.count('error:'))
if not stdout:
print ('No output from clang-format (crashed?).\n' +
'Please report to bugs.llvm.org.')
else:
lines = stdout.split('\n')
output = json.loads(lines[0])
lines = lines[1:]
sequence = difflib.SequenceMatcher(None, vim.current.buffer, lines)
for op in reversed(sequence.get_opcodes()):
if op[0] is not 'equal':
vim.current.buffer[op[1]:op[2]] = lines[op[3]:op[4]]
vim.command('goto %d' % (output['Cursor'] + 1))
......@@ -165,6 +165,11 @@ PATH_SPECIFIC_WHITELISTED_LICENSES = {
'UNKNOWN',
],
# http://crbug.com/333508
'third_party/clang_format/scripts': [
'UNKNOWN',
],
# Not used. http://crbug.com/156020
# Using third_party/cros_dbus_cplusplus/cros_dbus_cplusplus.gyp instead.
'third_party/cros_dbus_cplusplus/source/autogen.sh': [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment