Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I've written a diff script for workbench files which can be integrated with TortoiseSVN and TortoiseGit, which will exactly do what Jim Lewis suggests: Extract the actual XML from the archive and diff it. </p> <p>The script will also eliminate all the <em>ptr</em>-Attribute noise in the diff. Merging is not possible and would be a bit more complicated (discover how the <em>ptr</em>-attributes would behave, re-pack the XML into the archive, what's with the other metadata in the archive?, ...)</p> <p>The python script is available at pastebin under CC-BY 3.0:</p> <p><a href="http://pastebin.com/AcD7dBNH" rel="nofollow">http://pastebin.com/AcD7dBNH</a></p> <pre class="lang-py prettyprint-override"><code># 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 # 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) &lt; 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(zipA.read("document.mwb.xml" )) docBBytes = sanitizeMwbXml(zipB.read("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) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload