12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/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:]))
|