#!/usr/bin/env python2 # This script replaces prefixes of files, and symbols in that file. # Useful for creating different versions of the codebase that don't # conflict at compile time. # # example: # $ ./scripts/prefix.py lfs2 import os import os.path import re import glob import itertools import tempfile import shutil import subprocess DEFAULT_PREFIX = "lfs" def subn(from_prefix, to_prefix, name): name, count1 = re.subn('\\b'+from_prefix, to_prefix, name) name, count2 = re.subn('\\b'+from_prefix.upper(), to_prefix.upper(), name) name, count3 = re.subn('\\B-D'+from_prefix.upper(), '-D'+to_prefix.upper(), name) return name, count1+count2+count3 def main(from_prefix, to_prefix=None, files=None): if not to_prefix: from_prefix, to_prefix = DEFAULT_PREFIX, from_prefix if not files: files = subprocess.check_output([ 'git', 'ls-tree', '-r', '--name-only', 'HEAD']).split() for oldname in files: # Rename any matching file names newname, namecount = subn(from_prefix, to_prefix, oldname) if namecount: subprocess.check_call(['git', 'mv', oldname, newname]) # Rename any prefixes in file count = 0 with open(newname+'~', 'w') as tempf: with open(newname) as newf: for line in newf: line, n = subn(from_prefix, to_prefix, line) count += n tempf.write(line) shutil.copystat(newname, newname+'~') os.rename(newname+'~', newname) subprocess.check_call(['git', 'add', newname]) # Summary print '%s: %d replacements' % ( '%s -> %s' % (oldname, newname) if namecount else oldname, count) if __name__ == "__main__": import sys sys.exit(main(*sys.argv[1:]))