OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Moves C++ files to a new location, updating any include paths that point | 6 """Moves C++ files to a new location, updating any include paths that point |
7 to them, and re-ordering headers as needed. If multiple source files are | 7 to them, and re-ordering headers as needed. If multiple source files are |
8 specified, the destination must be a directory. Updates include guards in | 8 specified, the destination must be a directory. Updates include guards in |
9 moved header files. Assumes Chromium coding style. | 9 moved header files. Assumes Chromium coding style. |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 | 26 |
27 import mffr | 27 import mffr |
28 | 28 |
29 if __name__ == '__main__': | 29 if __name__ == '__main__': |
30 # Need to add the directory containing sort-headers.py to the Python | 30 # Need to add the directory containing sort-headers.py to the Python |
31 # classpath. | 31 # classpath. |
32 sys.path.append(os.path.abspath(os.path.join(sys.path[0], '..'))) | 32 sys.path.append(os.path.abspath(os.path.join(sys.path[0], '..'))) |
33 sort_headers = __import__('sort-headers') | 33 sort_headers = __import__('sort-headers') |
34 | 34 |
35 | 35 |
36 HANDLED_EXTENSIONS = ['.cc', '.mm', '.h', '.hh'] | 36 HANDLED_EXTENSIONS = ['.cc', '.mm', '.h', '.hh', '.cpp'] |
37 | 37 |
38 | 38 |
39 def IsHandledFile(path): | 39 def IsHandledFile(path): |
40 return os.path.splitext(path)[1] in HANDLED_EXTENSIONS | 40 return os.path.splitext(path)[1] in HANDLED_EXTENSIONS |
41 | 41 |
42 | 42 |
43 def MakeDestinationPath(from_path, to_path): | 43 def MakeDestinationPath(from_path, to_path): |
44 """Given the from and to paths, return a correct destination path. | 44 """Given the from and to paths, return a correct destination path. |
45 | 45 |
46 The initial destination path may either a full path or a directory. | 46 The initial destination path may either a full path or a directory. |
(...skipping 30 matching lines...) Expand all Loading... |
77 from_path = from_path.replace('\\', '/') | 77 from_path = from_path.replace('\\', '/') |
78 to_path = to_path.replace('\\', '/') | 78 to_path = to_path.replace('\\', '/') |
79 | 79 |
80 if os.path.splitext(from_path)[1] in ['.h', '.hh']: | 80 if os.path.splitext(from_path)[1] in ['.h', '.hh']: |
81 UpdateIncludeGuard(from_path, to_path) | 81 UpdateIncludeGuard(from_path, to_path) |
82 | 82 |
83 # Update include/import references. | 83 # Update include/import references. |
84 files_with_changed_includes = mffr.MultiFileFindReplace( | 84 files_with_changed_includes = mffr.MultiFileFindReplace( |
85 r'(#(include|import)\s*["<])%s([>"])' % re.escape(from_path), | 85 r'(#(include|import)\s*["<])%s([>"])' % re.escape(from_path), |
86 r'\1%s\3' % to_path, | 86 r'\1%s\3' % to_path, |
87 ['*.cc', '*.h', '*.m', '*.mm']) | 87 ['*.cc', '*.h', '*.m', '*.mm', '*.cpp']) |
88 | 88 |
89 # Reorder headers in files that changed. | 89 # Reorder headers in files that changed. |
90 for changed_file in files_with_changed_includes: | 90 for changed_file in files_with_changed_includes: |
91 def AlwaysConfirm(a, b): return True | 91 def AlwaysConfirm(a, b): return True |
92 sort_headers.FixFileWithConfirmFunction(changed_file, AlwaysConfirm, True) | 92 sort_headers.FixFileWithConfirmFunction(changed_file, AlwaysConfirm, True) |
93 | 93 |
94 # Update comments; only supports // comments, which are primarily | 94 # Update comments; only supports // comments, which are primarily |
95 # used in our code. | 95 # used in our code. |
96 # | 96 # |
97 # This work takes a bit of time. If this script starts feeling too | 97 # This work takes a bit of time. If this script starts feeling too |
98 # slow, one good way to speed it up is to make the comment handling | 98 # slow, one good way to speed it up is to make the comment handling |
99 # optional under a flag. | 99 # optional under a flag. |
100 mffr.MultiFileFindReplace( | 100 mffr.MultiFileFindReplace( |
101 r'(//.*)%s' % re.escape(from_path), | 101 r'(//.*)%s' % re.escape(from_path), |
102 r'\1%s' % to_path, | 102 r'\1%s' % to_path, |
103 ['*.cc', '*.h', '*.m', '*.mm']) | 103 ['*.cc', '*.h', '*.m', '*.mm', '*.cpp']) |
104 | 104 |
105 # Update references in .gyp(i) files. | 105 # Update references in .gyp(i) files. |
106 def PathMinusFirstComponent(path): | 106 def PathMinusFirstComponent(path): |
107 """foo/bar/baz -> bar/baz""" | 107 """foo/bar/baz -> bar/baz""" |
108 parts = re.split(r"[/\\]", path, 1) | 108 parts = re.split(r"[/\\]", path, 1) |
109 if len(parts) == 2: | 109 if len(parts) == 2: |
110 return parts[1] | 110 return parts[1] |
111 else: | 111 else: |
112 return parts[0] | 112 return parts[0] |
113 mffr.MultiFileFindReplace( | 113 mffr.MultiFileFindReplace( |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 continue | 185 continue |
186 to_path = MakeDestinationPath(from_path, orig_to_path) | 186 to_path = MakeDestinationPath(from_path, orig_to_path) |
187 if not opts.already_moved: | 187 if not opts.already_moved: |
188 MoveFile(from_path, to_path) | 188 MoveFile(from_path, to_path) |
189 UpdatePostMove(from_path, to_path) | 189 UpdatePostMove(from_path, to_path) |
190 return 0 | 190 return 0 |
191 | 191 |
192 | 192 |
193 if __name__ == '__main__': | 193 if __name__ == '__main__': |
194 sys.exit(main()) | 194 sys.exit(main()) |
OLD | NEW |