#!/usr/bin/env python # Copyright 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """ mass-rename: update source files (gyp lists, #includes) to reflect a rename. Expects "git diff --cached -M" to list a bunch of renames. To use: 1) git mv foo1 bar1; git mv foo2 bar2; etc. 2) *without committing*, ./tools/git/mass-rename.py 3) look at git diff (without --cached) to see what the damage is """ import os import subprocess import sys BASE_DIR = os.path.abspath(os.path.dirname(__file__)) def main(): popen = subprocess.Popen('git diff --cached --raw -M', shell=True, stdout=subprocess.PIPE) out, _ = popen.communicate() if popen.returncode != 0: return 1 lines = out.splitlines() for item, line in enumerate(lines, 1): # Print progress print '[%d/%d]' % (item, len(lines)), parts = line.split('\t') if len(parts) != 3: print 'Skipping: %s -- not a rename?' % parts continue attrs, fro, to = parts if attrs.split()[4].startswith('R'): print 'Moving: %s' % fro subprocess.check_call([ sys.executable, os.path.join(BASE_DIR, 'move_source_file.py'), '--already_moved', '--no_error_for_non_source_file', fro, to]) else: print 'Skipping: %s -- not a rename?' % fro return 0 if __name__ == '__main__': sys.exit(main())