diff options
Diffstat (limited to 'Mac/Unsupported/fixgusidir.py')
-rw-r--r-- | Mac/Unsupported/fixgusidir.py | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/Mac/Unsupported/fixgusidir.py b/Mac/Unsupported/fixgusidir.py deleted file mode 100644 index 53ca5ba..0000000 --- a/Mac/Unsupported/fixgusidir.py +++ /dev/null @@ -1,89 +0,0 @@ -# fixgusidir - Modify filenames in the CWGUSI source tree, so -# that it can be put under CVS. Needed because there are files with slashes -# in their name, which CVS does not approve of. -# -# Usage: -# - On importing gusi in cvs: -# - Run the script after unpacking the gusi distribution. This creates -# _s_ files for all / files. -# - Remove all / files with "find file" or some such. -# - import the tree -# - On checking out gusi: -# - After checkout, run the script to create / files for all _s_ files. -# - After modifying stuff, or later checkouts: -# - Run the script. Conflicts between / and _s_ files will be reported. -# - Fix the problems by removing the outdated / or _s_ file. -# - Run the script again. Possibly do a cvs checkin. -import macfs -import os -import sys -import re - -# Substitution for slashes in filenames -SUBST = '_s_' -# Program to find those substitutions -SUBSTPROG = re.compile(SUBST) - -def main(): - if len(sys.argv) > 1: - gusidir = sys.argv[1] - else: - fss, ok = macfs.GetDirectory("CWGUSI source folder?") - if not ok: sys.exit(0) - gusidir = fss.as_pathname() - fixgusifolder(gusidir) - sys.exit(1) - -def fixgusifolder(gusidir): - """Synchronize files with / in their name with their _s_ counterparts""" - os.path.walk(gusidir, gusiwalk, None) - -def gusiwalk(dummy, top, names): - """Helper for fixgusifolder: convert a single directory full of files""" - # First remember names with slashes and with our slash-substitution - macnames = [] - codenames = [] - for name in names: - if '/' in name: - macnames.append(name) - if SUBSTPROG.search(name): - codenames.append(name) - # Next, check whether we need to copy any slash-files to subst-files - for name in macnames: - if os.path.isdir(name): - print '** Folder with slash in name cannot be handled!' - sys.exit(1) - othername = mac2codename(name) - if len(othername) > 31: - print '** Converted filename too long:', othername - sys.exit(1) - if othername in codenames: - codenames.remove(othername) - sync(os.path.join(top, name), os.path.join(top, othername)) - # Now codenames contains only files that have no / equivalent - for name in codenames: - othername = code2macname(name) - sync(os.path.join(top, name), os.path.join(top, othername)) - -def mac2codename(name): - return re.sub('/', SUBST, name) - -def code2macname(name): - return re.sub(SUBST, '/', name) - -def sync(old, new): - if os.path.exists(new): - # Both exist. Check that they are indentical - d1 = open(old, 'rb').read() - d2 = open(new, 'rb').read() - if d1 == d2: - print '-- OK ', old - return - print '** OUT-OF-SYNC', old - fp = open(new, 'wb') - fp.write(open(old, 'rb').read()) - print '-- COPIED ', old - -if __name__ == '__main__': - main() - |