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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
112 parts = re.split(r"[/\\]", path, 1) | 112 parts = re.split(r"[/\\]", path, 1) |
113 if len(parts) == 2: | 113 if len(parts) == 2: |
114 return parts[1] | 114 return parts[1] |
115 else: | 115 else: |
116 return parts[0] | 116 return parts[0] |
117 mffr.MultiFileFindReplace( | 117 mffr.MultiFileFindReplace( |
118 r'([\'"])%s([\'"])' % re.escape(PathMinusFirstComponent(from_path)), | 118 r'([\'"])%s([\'"])' % re.escape(PathMinusFirstComponent(from_path)), |
119 r'\1%s\2' % PathMinusFirstComponent(to_path), | 119 r'\1%s\2' % PathMinusFirstComponent(to_path), |
120 ['*.gyp*']) | 120 ['*.gyp*']) |
121 | 121 |
122 # Update references in BUILD.gn files. | |
123 # | |
124 # Unlike .gyp(i) files, BUILD.gn files can be placed in any directories, | |
125 # and paths in a BUILD.gn file are relative to the directory where the | |
126 # BUILD.gn file is placed. | |
127 # | |
128 # For instance, "chrome/browser/chromeos/device_uma.h.h" is listed as | |
Daniel Erat
2015/02/04 15:22:42
nit: s/\.h\.h/.h/
satorux1
2015/02/06 01:23:41
Done.
| |
129 # "browser/chromeos/device_uma.h" in "chrome/chrome_browser_chromeos.gypi", | |
130 # but it's listed as "device_uma.h" in "chrome/browser/chromeos/BUILD.gn". | |
131 # | |
132 # To handle this, the code here will visit directories from the top level | |
133 # src directory to the directory of |to_path| and try to update BUILD.gn in | |
134 # each directory. | |
135 # | |
136 # The code only handles files moved/renamed within the same BUILD.gn | |
137 # file. If files are moved beyond the same BUILD.gn file, the affected | |
138 # BUILD.gn files should be fixed manually. | |
139 def SplitByFirstComponent(path): | |
140 """'foo/bar/baz' -> ('foo', 'bar/baz') | |
141 'bar' -> ('bar', '') | |
142 '' -> ('', '') | |
Daniel Erat
2015/02/04 15:22:42
nice examples!
| |
143 """ | |
144 parts = re.split(r"[/\\]", path, 1) | |
145 if len(parts) == 2: | |
146 return (parts[0], parts[1]) | |
147 else: | |
148 return (parts[0], '') | |
149 | |
150 visiting_directory = '' | |
151 from_rest = from_path | |
152 to_rest = to_path | |
153 while True: | |
154 mffr.MultiFileFindReplace( | |
155 r'([\'"])%s([\'"])' % from_rest, | |
156 r'\1%s\2' % to_rest, | |
157 [os.path.join(visiting_directory, 'BUILD.gn')]) | |
158 from_first, from_rest = SplitByFirstComponent(from_rest) | |
159 to_first, to_rest = SplitByFirstComponent(to_rest) | |
160 visiting_directory = os.path.join(visiting_directory, from_first) | |
161 if not from_rest or not to_rest: | |
162 break | |
163 | |
122 | 164 |
123 def MakeIncludeGuardName(path_from_root): | 165 def MakeIncludeGuardName(path_from_root): |
124 """Returns an include guard name given a path from root.""" | 166 """Returns an include guard name given a path from root.""" |
125 guard = path_from_root.replace('/', '_') | 167 guard = path_from_root.replace('/', '_') |
126 guard = guard.replace('\\', '_') | 168 guard = guard.replace('\\', '_') |
127 guard = guard.replace('.', '_') | 169 guard = guard.replace('.', '_') |
128 guard += '_' | 170 guard += '_' |
129 return guard.upper() | 171 return guard.upper() |
130 | 172 |
131 | 173 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
189 continue | 231 continue |
190 to_path = MakeDestinationPath(from_path, orig_to_path) | 232 to_path = MakeDestinationPath(from_path, orig_to_path) |
191 if not opts.already_moved: | 233 if not opts.already_moved: |
192 MoveFile(from_path, to_path) | 234 MoveFile(from_path, to_path) |
193 UpdatePostMove(from_path, to_path) | 235 UpdatePostMove(from_path, to_path) |
194 return 0 | 236 return 0 |
195 | 237 |
196 | 238 |
197 if __name__ == '__main__': | 239 if __name__ == '__main__': |
198 sys.exit(main()) | 240 sys.exit(main()) |
OLD | NEW |