diff options
author | Christopher Haster <chaster@utexas.edu> | 2019-01-26 02:07:17 +0300 |
---|---|---|
committer | Christopher Haster <chaster@utexas.edu> | 2019-04-08 21:55:28 +0300 |
commit | 7f7b7332e3a356587b814ceebf23a8e68f06da9e (patch) | |
tree | a8e9a6ecd67e229cae6e2cf5deedbbf735f9542f /scripts | |
parent | d3a2cf48d449f259bc15a3a1058323132f3eeef7 (diff) |
Added scripts/prefix.py for automatically prefixing version numbers
Example:
./scripts/prefix.py lfs2
Will convert the following:
lfs_* -> lfs2_*
LFS_* -> LFS2_*
-DLFS_* -> -DLFS2_*
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/prefix.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/prefix.py b/scripts/prefix.py new file mode 100755 index 0000000..ca547b6 --- /dev/null +++ b/scripts/prefix.py @@ -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:])) |