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

Unified Diff: tools/sort-headers.py

Issue 1213613011: Allow move_source_file.py and sort-headers.py to work on blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Feedback Created 5 years, 5 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 | « tools/git/move_source_file.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/sort-headers.py
diff --git a/tools/sort-headers.py b/tools/sort-headers.py
index 5e8fc2641f261e502fcb30c64ed80ecc9a4944c9..88bbd555c3952a64037f738d231b1e2e4f647a7a 100755
--- a/tools/sort-headers.py
+++ b/tools/sort-headers.py
@@ -16,15 +16,33 @@ import sys
from yes_no import YesNo
-def IncludeCompareKey(line):
+def IsInclude(line):
+ """Returns True if the line is an #include/#import/import line."""
+ return any([line.startswith('#include '), line.startswith('#import '),
+ line.startswith('import ')])
+
+
+def IncludeCompareKey(line, for_blink):
"""Sorting comparator key used for comparing two #include lines.
- Returns the filename without the #include/#import/import prefix.
+
+ Returns an integer, optionally followed by a string. The integer is used
+ for coarse sorting of different categories of headers, and the string is
+ used for fine sorting of headers within categeries.
"""
for prefix in ('#include ', '#import ', 'import '):
if line.startswith(prefix):
line = line[len(prefix):]
break
+ if for_blink:
+ # Blink likes to have its "config.h" include first.
+ if line.startswith('"config.h"'):
+ return '0'
+
+ # Blink sorts system headers after others. This is handled by sorting
+ # alphabetically so no need to do anything tricky.
+ return '1' + line
+
# The win32 api has all sorts of implicit include order dependencies :-/
# Give a few headers special sort keys that make sure they appear before all
# other headers.
@@ -47,14 +65,11 @@ def IncludeCompareKey(line):
return '4' + line
-def IsInclude(line):
- """Returns True if the line is an #include/#import/import line."""
- return any([line.startswith('#include '), line.startswith('#import '),
- line.startswith('import ')])
-
-
-def SortHeader(infile, outfile):
+def SortHeader(infile, outfile, for_blink):
"""Sorts the headers in infile, writing the sorted file to outfile."""
+ def CompareKey(line):
+ return IncludeCompareKey(line, for_blink)
+
for line in infile:
if IsInclude(line):
headerblock = []
@@ -67,7 +82,7 @@ def SortHeader(infile, outfile):
except StopIteration:
infile_ended_on_include_line = True
break
- for header in sorted(headerblock, key=IncludeCompareKey):
+ for header in sorted(headerblock, key=CompareKey):
outfile.write(header)
if infile_ended_on_include_line:
# We already wrote the last line above; exit to ensure it isn't written
@@ -79,7 +94,7 @@ def SortHeader(infile, outfile):
def FixFileWithConfirmFunction(filename, confirm_function,
- perform_safety_checks):
+ perform_safety_checks, for_blink=False):
"""Creates a fixed version of the file, invokes |confirm_function|
to decide whether to use the new file, and cleans up.
@@ -99,7 +114,7 @@ def FixFileWithConfirmFunction(filename, confirm_function,
fixfilename = filename + '.new'
infile = open(filename, 'rb')
outfile = open(fixfilename, 'wb')
- SortHeader(infile, outfile)
+ SortHeader(infile, outfile, for_blink)
infile.close()
outfile.close() # Important so the below diff gets the updated contents.
@@ -116,7 +131,7 @@ def FixFileWithConfirmFunction(filename, confirm_function,
pass
-def DiffAndConfirm(filename, should_confirm, perform_safety_checks):
+def DiffAndConfirm(filename, should_confirm, perform_safety_checks, for_blink):
"""Shows a diff of what the tool would change the file named
filename to. Shows a confirmation prompt if should_confirm is true.
Saves the resulting file if should_confirm is false or the user
@@ -132,7 +147,8 @@ def DiffAndConfirm(filename, should_confirm, perform_safety_checks):
return (not should_confirm or YesNo('Use new file (y/N)?'))
- FixFileWithConfirmFunction(filename, ConfirmFunction, perform_safety_checks)
+ FixFileWithConfirmFunction(filename, ConfirmFunction, perform_safety_checks,
+ for_blink)
def IsUnsafeToReorderHeaders(filename):
# *_message_generator.cc is almost certainly a file that generates IPC
@@ -153,6 +169,9 @@ def main():
help='Do not perform the safety checks via which this '
'script refuses to operate on files for which it thinks '
'the include ordering is semantically significant.')
+ parser.add_option('--for_blink', action='store_true', default=False,
+ dest='for_blink', help='Whether the blink header sorting '
+ 'rules should be applied.')
opts, filenames = parser.parse_args()
if len(filenames) < 1:
@@ -160,7 +179,8 @@ def main():
return 1
for filename in filenames:
- DiffAndConfirm(filename, opts.should_confirm, opts.perform_safety_checks)
+ DiffAndConfirm(filename, opts.should_confirm, opts.perform_safety_checks,
+ opts.for_blink)
if __name__ == '__main__':
« no previous file with comments | « tools/git/move_source_file.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698