|
@@ -0,0 +1,61 @@
|
|
|
|
|
+#!/usr/bin/env python
|
|
|
|
|
+
|
|
|
|
|
+# 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:]))
|