summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/discrepancy-fixer.py
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-01-10 15:12:21 +1100
committer Vas Crabb <vas@vastheman.com>2017-01-10 15:12:21 +1100
commit74af888a3021f321f5c5af73d600ff5db2833335 (patch)
tree41dde5d0966962474a0abb50f328567a6922a4df /src/tools/discrepancy-fixer.py
parentf1ead008c4bd40a4ed67bc38879be7376db9d0d4 (diff)
Clean up scripts from #1861 (nw):
* use spaces for indentation * better error reporting * some optimisation * slightly more intelligent preservation of tabulation
Diffstat (limited to 'src/tools/discrepancy-fixer.py')
-rwxr-xr-xsrc/tools/discrepancy-fixer.py121
1 files changed, 75 insertions, 46 deletions
diff --git a/src/tools/discrepancy-fixer.py b/src/tools/discrepancy-fixer.py
index bc334444e85..d36d2863247 100755
--- a/src/tools/discrepancy-fixer.py
+++ b/src/tools/discrepancy-fixer.py
@@ -1,53 +1,82 @@
#!/usr/bin/python
+##
+## license:BSD-3-Clause
+## copyright-holders:Zoe Blade
# Fix discrepancies in arcade ROM dump names, by Zoe Blade
-# For Python 2
+# For Python 2 and 3
+import sys
import xml.etree.ElementTree
-print('Loading XML file...')
-root = xml.etree.ElementTree.parse('arcade.xml').getroot()
-print('Done.')
-for childMachine in root.iter('machine'):
- if not childMachine.get('cloneof'):
- continue
-
- for parentMachine in root.iter('machine'):
- if not parentMachine.get('name') == childMachine.get('cloneof'):
- continue
-
- # Machine pair found
-
- for childRom in childMachine.iter('rom'):
- for parentRom in parentMachine.iter('rom'):
- if not parentRom.get('sha1') == childRom.get('sha1'):
- continue
-
- # ROM pair found
-
- if parentRom.get('name') == childRom.get('name'):
- break
-
- # The names don't match
-
- sourceFilename = childMachine.get('sourcefile')
-
- input = open(sourceFilename, 'r')
- source = input.read()
- input.close()
-
- oldRomFilename = '"' + childRom.get('name') + '"'
- newRomFilename = '"' + parentRom.get('name') + '"'
-
- oldRomFilenamePadded = oldRomFilename.ljust(14, ' ')
- newRomFilenamePadded = newRomFilename.ljust(14, ' ')
-
- source = source.replace(oldRomFilenamePadded, newRomFilenamePadded) # Try to preserve fancy spacing where possible
- source = source.replace(oldRomFilename, newRomFilename) # Fallback on just replacing the filename
-
- output = open(sourceFilename, 'w')
- output.write(source)
- output.close()
-
- print(sourceFilename + ': ' + oldRomFilename + ' -> ' + newRomFilename)
+def fixPair(parentMachine, childMachine):
+ changes = { }
+ for childRom in childMachine.iter('rom'):
+ for parentRom in parentMachine.iter('rom'):
+ if parentRom.get('sha1') == childRom.get('sha1'):
+ # ROM pair found
+ if parentRom.get('name') != childRom.get('name'):
+ # The names don't match
+ changes[childRom.get('name')] = parentRom.get('name')
+
+ if changes:
+ sourceFilename = childMachine.get('sourcefile')
+
+ try:
+ input = open(sourceFilename, 'r')
+ source = input.read()
+ input.close()
+ except Exception as e:
+ sys.stderr.write('%s: error reading %s: %s\n' % (sys.argv[0], sourceFilename, e))
+ return False
+
+ for oldRomFilename in changes:
+ newRomFilename = '"%s"' % (changes[oldRomFilename])
+ oldRomFilename = '"%s"' % (oldRomFilename)
+
+ paddedLen = max(len(oldRomFilename), len(newRomFilename))
+ oldRomFilenamePadded = oldRomFilename.ljust(paddedLen, ' ')
+ newRomFilenamePadded = newRomFilename.ljust(paddedLen, ' ')
+
+ source = source.replace(oldRomFilenamePadded, newRomFilenamePadded) # Try to preserve fancy spacing where possible
+ source = source.replace(oldRomFilename, newRomFilename) # Fallback on just replacing the filename
+
+ sys.stdout.write('%s: %s -> %s\n' % (sourceFilename, oldRomFilename, newRomFilename))
+
+ output = open(sourceFilename, 'w')
+ output.write(source)
+ output.close()
+
+ return True
+
+
+if __name__ == '__main__':
+ if len(sys.argv) > 2:
+ sys.stderr.write('Usage:\n%s [arcade.xml]\n' % sys.argv[0])
+ sys.exit(1)
+
+ if len(sys.argv) > 1:
+ filename = sys.argv[1]
+ else:
+ filename = 'arcade.xml'
+
+ sys.stderr.write('Loading XML file...')
+ sys.stderr.flush()
+ try:
+ root = xml.etree.ElementTree.parse(filename).getroot()
+ except Exception as e:
+ sys.stderr.write('\n%s: error parsing %s: %s\n' % (sys.argv[0], filename, e))
+ sys.exit(2)
+ sys.stderr.write('done.\n')
+
+ errors = 0
+ for childMachine in root.iter('machine'):
+ if childMachine.get('cloneof'):
+ for parentMachine in root.iter('machine'):
+ if parentMachine.get('name') == childMachine.get('cloneof'):
+ # Machine pair found
+ if not fixPair(parentMachine, childMachine):
+ errors += 1
+
+ sys.exit(0 if errors == 0 else 3)