Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # extensions: mwb
- # TortoiseSVN Diff script for MySQL Workbench scheme files
- # 2012 by Oliver Iking, Z-Software GmbH, oliverikingREPLACETHISWITHANATz-software.net, http://www.z-software.net/
- # This work is licensed under a Creative Commons Attribution 3.0 Unported License - http://creativecommons.org/licenses/by/3.0/
- # Will produce two diffable documents, which don't resemble the FULL MWB content, but the scheme relevant data.
- # Merging is not possible
- # Open your TortoiseSVN (or TortoiseSomething) settings, go to the "Diff Viewer" tab and click on "Advanced". Add
- # a row with the extension ".mwb" and a command line of
- # "path\to\python.exe" "path\to\diff-mwb.py" %base %mine
- # Apply changes and now you can diff mysql workbench scheme files
- import sys
- import zipfile
- import os
- import time
- import tempfile
- import re
- if sys.version >= '3':
- import bytes
- def readFromZip(zf, fname):
- if sys.version < '3':
- return zf.read(fname)
- else:
- return bytes.decode( zf.read(fname) )
- # mysql workbench XML will have _ptr_ attributes which are modified on each save for almost each XML node. Remove the visual litter,
- # make actual changes stand out.
- def sanitizeMwbXml( xml ):
- return re.sub('_ptr_="([0-9a-fA-F]{8})"', '', xml)
- try:
- if len(sys.argv) < 2:
- print("Not enough parameters, cannot diff documents!")
- sys.exit(1)
- docOld = sys.argv[1]
- docNew = sys.argv[2]
- if not os.path.exists(docOld) or not os.path.exists(docNew):
- print("Documents don't exist, cannot diff!")
- sys.exit(1)
- # Workbench files are actually zip archives
- zipA = zipfile.ZipFile( docOld, 'r' )
- zipB = zipfile.ZipFile( docNew, 'r' )
- tempSubpath = os.tempnam(None,"mwbcompare")
- docA = os.path.join( tempSubpath, "mine.document.mwb.xml" )
- docB = os.path.join( tempSubpath, "theirs.document.mwb.xml" )
- os.makedirs( tempSubpath )
- if os.path.exists(docA) or os.path.exists(docB):
- print("Cannot extract documents, files exist!")
- sys.exit(1)
- # Read, sanitize and write actual scheme XML contents to temporary files
- docABytes = sanitizeMwbXml( readFromZip( zipA, "document.mwb.xml" ) )
- docBBytes = sanitizeMwbXml( readFromZip( zipB, "document.mwb.xml" ) )
- docAFile = open(docA, "w")
- docBFile = open(docB, "w")
- docAFile.write(docABytes)
- docBFile.write(docBBytes)
- docAFile.close()
- docBFile.close()
- os.system("TortoiseProc /command:diff /path:\"" + docA + "\" /path2:\"" + docB + "\"");
- # TortoiseProc will spawn a subprocess so we can't delete the files. They're in the tempdir, so they
- # will be cleaned up eventually
- #os.unlink(docA)
- #os.unlink(docB)
- sys.exit(0)
- except Exception as e:
- print str(e)
- # Sleep, or the command window will close
- time.sleep(5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement