Chromium Code Reviews| Index: tools/git/move_source_file.py |
| diff --git a/tools/git/move_source_file.py b/tools/git/move_source_file.py |
| index 117b3ebb1980a7e1d37db0c216cda4266cd35984..56618d4dc4f0380eddddd134d81e32348b09165a 100755 |
| --- a/tools/git/move_source_file.py |
| +++ b/tools/git/move_source_file.py |
| @@ -119,6 +119,48 @@ def UpdatePostMove(from_path, to_path): |
| r'\1%s\2' % PathMinusFirstComponent(to_path), |
| ['*.gyp*']) |
| + # Update references in BUILD.gn files. |
| + # |
| + # Unlike .gyp(i) files, BUILD.gn files can be placed in any directories, |
| + # and paths in a BUILD.gn file are relative to the directory where the |
| + # BUILD.gn file is placed. |
| + # |
| + # 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.
|
| + # "browser/chromeos/device_uma.h" in "chrome/chrome_browser_chromeos.gypi", |
| + # but it's listed as "device_uma.h" in "chrome/browser/chromeos/BUILD.gn". |
| + # |
| + # To handle this, the code here will visit directories from the top level |
| + # src directory to the directory of |to_path| and try to update BUILD.gn in |
| + # each directory. |
| + # |
| + # The code only handles files moved/renamed within the same BUILD.gn |
| + # file. If files are moved beyond the same BUILD.gn file, the affected |
| + # BUILD.gn files should be fixed manually. |
| + def SplitByFirstComponent(path): |
| + """'foo/bar/baz' -> ('foo', 'bar/baz') |
| + 'bar' -> ('bar', '') |
| + '' -> ('', '') |
|
Daniel Erat
2015/02/04 15:22:42
nice examples!
|
| + """ |
| + parts = re.split(r"[/\\]", path, 1) |
| + if len(parts) == 2: |
| + return (parts[0], parts[1]) |
| + else: |
| + return (parts[0], '') |
| + |
| + visiting_directory = '' |
| + from_rest = from_path |
| + to_rest = to_path |
| + while True: |
| + mffr.MultiFileFindReplace( |
| + r'([\'"])%s([\'"])' % from_rest, |
| + r'\1%s\2' % to_rest, |
| + [os.path.join(visiting_directory, 'BUILD.gn')]) |
| + from_first, from_rest = SplitByFirstComponent(from_rest) |
| + to_first, to_rest = SplitByFirstComponent(to_rest) |
| + visiting_directory = os.path.join(visiting_directory, from_first) |
| + if not from_rest or not to_rest: |
| + break |
| + |
| def MakeIncludeGuardName(path_from_root): |
| """Returns an include guard name given a path from root.""" |