Author: esr
Date: Tue Apr 24 00:50:58 2007
New Revision: 17021
URL: http://svn.gna.org/viewcvs/wesnoth?rev=17021&view=rev
Log:
Added --clean and --revert so that we can safely experiment with conversions.
Modified:
trunk/data/tools/upconvert
Modified: trunk/data/tools/upconvert
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/upconvert?rev=17021&r1=17020&r2=17021&view=diff
==============================================================================
--- trunk/data/tools/upconvert (original)
+++ trunk/data/tools/upconvert Tue Apr 24 00:50:58 2007
@@ -1,9 +1,23 @@
#!/usr/bin/env python
#
-# Up-convert UMC between versions.
+# Up-convert WML and maps between versions.
+#
+# All conversion logic for lifting WML and maps from older versions of the
+# markup to newer ones should live here. This includes resource path changes
+# and renames, also map format conversions.
+#
+# The recommended procedure is this:
+# 1. Run it with --dryrun first to see what it will do.
+# 2. If the messages look good, run without .dryrun; the old content
+# will be left in backup files with a -bak extension.
+# 3. Test the conversion.
+# 4. Use either --clean to remove the -bak files or --revert to
+# undo the conversion.
#
# Note about the 1.3.1 -> 1.3.2 map conversion: terrain codes will only be
-# spotted and converted when preceded by space, comma, or equal sign.
+# spotted and converted when preceded by space, comma, or equal sign. This
+# will handle maps (either in their own files or included as a WML attribute)
+# and the most common cases in WML (e.g. filters and unit declarations).
import sys, os, re, getopt
@@ -122,6 +136,8 @@
-d, --dryrun List changes but don't perform them.
-o, --oldversion Specify version to begin with.
-v, --verbose List files as they are examined.
+ -c, --clean Clean up -bak files
+ -r, --revert Revert the conversion from the -bak files
""")
def mapconvert2(mapline):
@@ -131,15 +147,19 @@
return mapline
if __name__ == '__main__':
- (options, arguments) = getopt.getopt(sys.argv[1:], "dho:v", [
+ (options, arguments) = getopt.getopt(sys.argv[1:], "cdho:rv", [
"help",
"oldversion=",
"dryrun",
"verbose",
+ "clean",
+ "revert",
])
oldversion = 'older'
dryrun = False
verbose = False
+ clean = False
+ revert = False
for (switch, val) in options:
if switch in ('-h', '--help'):
help()
@@ -150,6 +170,14 @@
verbose = True
elif switch in ('-d', '--dryrun'):
dryrun = True
+ elif switch in ('-c', '--clean'):
+ clean = True
+ elif switch in ('-r', '--revert'):
+ revert = True
+
+ if clean and revert:
+ sys.stderr.write("upconvert: can't do clean and revert together.\n")
+ sys.exit(1)
# Compute the series of version upgrades to perform, and describe it.
versions = filemoves.keys()
@@ -171,36 +199,50 @@
for fn in allcfgfiles("."):
if verbose:
print fn
- if dryrun:
- ifp = open(fn)
+ backup = fn + "-bak"
+ if clean or revert:
+ # Do housekeeping
+ if os.path.exists(backup):
+ if clean:
+ print "Removing %s" % backup
+ if not dryrun:
+ os.remove(backup)
+ elif revert:
+ print "Reverting %s" % backup
+ if not dryrun:
+ os.rename(backup, fn)
else:
- os.rename(fn, fn + "-bak")
- ifp = open(fn + "-bak")
- ofp = open(fn, "w")
- modified = False
- for (i, line) in enumerate(ifp):
- transformed = line
- # Filename conversions
- if ".cfg" in fn:
- for step in fileconversions:
- for (old, new) in step:
- transformed = transformed.replace(old, new)
- # Map-format conversions
- if "1.3.1" in versions and 'message' not in transformed:
- transformed = mapconvert2(transformed)
+ # Do file conversions
+ if dryrun:
+ ifp = open(fn)
+ else:
+ os.rename(fn, backup)
+ ifp = open(backup)
+ ofp = open(fn, "w")
+ modified = False
+ for (i, line) in enumerate(ifp):
+ transformed = line
+ # Filename conversions
+ if ".cfg" in fn:
+ for step in fileconversions:
+ for (old, new) in step:
+ transformed = transformed.replace(old, new)
+ # Map-format conversions
+ if "1.3.1" in versions and 'message' not in transformed:
+ transformed = mapconvert2(transformed)
+ if ofp:
+ ofp.write(transformed)
+ if transformed != line:
+ if not 'maps' in fn:
+ print "%s, line %d: %s -> %s" % \
+ (fn, i+1, line.strip(), transformed.strip())
+ modified = True
if ofp:
- ofp.write(transformed)
- if transformed != line:
- if not 'maps' in fn:
- print "%s, line %d: %s -> %s" % \
- (fn, i+1, line.strip(), transformed.strip())
- modified = True
- if ofp:
- ofp.close()
- if not modified:
- # Nothing changed, move the backup file back into place.
- os.rename(fn + "-bak", fn)
- if modified and 'maps' in fn:
- print "%s modified." % fn
+ ofp.close()
+ if not modified:
+ # Nothing changed, move the backup file back into place.
+ os.rename(backup, fn)
+ if modified and 'maps' in fn:
+ print "%s modified." % fn
# upconvert ends here
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits