upconvert now translates terrain_likes clauses.

This commit is contained in:
Eric S. Raymond 2007-04-29 21:56:57 +00:00
parent fee9a9a168
commit ed206aa128

View file

@ -8,6 +8,9 @@
# markup to newer ones should live here. This includes resource path changes
# and renames, also map format conversions.
#
# Takes any number of directories as arguments. Each directory is converted.
# If no directiories are specified, acts on the current directory.
#
# 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
@ -20,9 +23,10 @@
# undo the conversion.
#
# This script presently makes no effort to fix terrain codes outside of maps,
# e.g. in terrain filters. It will barf on maps with custom terrains.
# e.g. in terrain filters, except that it does handle terrain_liked.
# It will barf on maps with custom terrains.
import sys, os, re, getopt
import sys, os, re, getopt, curses.ascii
filemoves = {
# Older includes all previous to 1.3.1.
@ -586,9 +590,25 @@ if __name__ == '__main__':
def texttransform(filename, lineno, line):
"Resource-name transformation on text lines."
transformed = line
# First, do resource-file moves
for step in fileconversions:
for (old, new) in step:
transformed = transformed.replace(old, new)
# Now, handle terrain-liked=
if "terrain_liked=" in transformed:
(pre, terrain) = transformed.split("=")
newterrains = []
post = ""
for c in terrain:
if c in conversion1:
newterrains.append(conversion1[c])
elif curses.ascii.isspace(c):
post += c
else:
print "%s, line %d: custom terrain %s ignored." \
(filename, lineno+1, c)
transformed = pre + "=" + ",".join(newterrains) + post
# Report the changes
if verbose > 0 and transformed != line:
msg = "%s, line %d: %s -> %s" % \
(filename, lineno+1, line.strip(), transformed.strip())
@ -602,45 +622,48 @@ if __name__ == '__main__':
else:
maptransform = maptransform1
# Perform resource file substitutions
ofp = None
for fn in allcfgfiles("."):
if verbose >= 3:
print fn + ":"
backup = fn + "-bak"
if clean or revert:
# Do housekeeping
if os.path.exists(backup):
if clean:
print "upconvert: removing %s" % backup
if not dryrun:
os.remove(backup)
elif revert:
print "upconvert: reverting %s" % backup
if not dryrun:
os.rename(backup, fn)
elif diffs:
# Display diffs
if os.path.exists(backup):
print fn
os.system("diff -u %s %s" % (backup, fn))
else:
# Do file conversions
try:
changed = translator(fn, maptransform, texttransform)
if changed:
print "upconvert: converting", fn
if not dryrun:
os.rename(fn, backup)
ofp = open(fn, "w")
ofp.write(changed)
ofp.close()
except maptransform_error, e:
if e.level <= verbose:
sys.stderr.write("upconvert: " + `e` + "\n")
except:
sys.stderr.write("upconvert: internal error on %s\n" % fn)
(exc_type, exc_value, exc_traceback) = sys.exc_info()
raise exc_type, exc_value, exc_traceback
if not arguments:
arguments = ["."]
for dir in arguments:
ofp = None
for fn in allcfgfiles(dir):
if verbose >= 3:
print fn + ":"
backup = fn + "-bak"
if clean or revert:
# Do housekeeping
if os.path.exists(backup):
if clean:
print "upconvert: removing %s" % backup
if not dryrun:
os.remove(backup)
elif revert:
print "upconvert: reverting %s" % backup
if not dryrun:
os.rename(backup, fn)
elif diffs:
# Display diffs
if os.path.exists(backup):
print fn
os.system("diff -u %s %s" % (backup, fn))
else:
# Do file conversions
try:
changed = translator(fn, maptransform, texttransform)
if changed:
print "upconvert: converting", fn
if not dryrun:
os.rename(fn, backup)
ofp = open(fn, "w")
ofp.write(changed)
ofp.close()
except maptransform_error, e:
if e.level <= verbose:
sys.stderr.write("upconvert: " + `e` + "\n")
except:
sys.stderr.write("upconvert: internal error on %s\n" % fn)
(exc_type, exc_value, exc_traceback) = sys.exc_info()
raise exc_type, exc_value, exc_traceback
# upconvert ends here