Search code examples
svndiffzipmeld

Subversion diff for zipped xml file


I'm using MySQL Workbench to maintain the database schema for an application. The .mwb file that Workbench uses, which is a zipped XML document, is kept in a Subversion repository.

The file is treated as binary data by Subversion, so I cannot use svn diff to show the changes, for example before committing.

Since the data is really XML, I'm thinking there might be some way to show the diff anyway, maybe some script that unzips the file before, or some plugin to svn diff.

The ideal solution would allow this:

$ svn diff db-model.mwb

or even using Meld:

$ meld db-model.mwb

What approach can you think of to accomplish this? Maybe someone else has had this problem of showing diff's for archived text files in Subversion.


Solution

  • Subversion allows you to use external differencing tools . What you can do is write a wrapper script, and tell Subversion to use it as its "diff" command. Your wrapper would parse the arguments it gets from Subversion to pick out the "left" and "right" filenames, operate on them, and return an error code that Subversion will interpret as success or failure. In your case, the wrapper could unzip the XML files, and pass the unzipped results to "diff" or another tool of your choice.

    Subversion will balk at diff-ing files that were detected as "binary" when they were checked in. The "--force" option lets you override this check, so your wrapper script will be be run even if the input files are checked in as binaries.