I was introduced to subversion about a month and a half ago, and have generally found it to be wonderful, and a vast improvement over CVS. I won't get into the details, because I'll just sound like every other person out there who has switched to svn and then raved about it, so you can just look up somebody else's blog post on the subject. One thing I did miss, however, was the ability to open diffs in FileMerge.
Previously I got my FileMerge graphical diffs by using CVL, a GUI front-end to CVS, but I've been using svn on the command-line and am very happy with that, except for this one thing. I figured that this must be a common request, and that somebody has figured it out, so I went Googling. I turned up nothing good; a couple of gigantic scripts that didn't work on my computer, and nothing else.
So finally today, I decided to solve things once and for all, and came up with 20 lines of python that fixes it up very nicely. And now I'll share it with the world!
Put the following code into a file called svnopendiffshim.py that's somewhere in your $PATH:
Basically, this Python script just goes through the arguments that svn passes to its diff program, strips out everything that FileMerge doesn't understand, and passes the rest to opendiff, which is the command-line program which opens FileMerge.
Now, add one line to your .profile (if you're using a shell other than bash, you're on your own here): alias svndiff='svn diff --diff-cmd svnopendiffshim.py'
Now open a new Terminal window, go into a project, and typesvndiff somefile.h and, bang, your diff opens in FileMerge.
So there you have it. I hope somebody finds this as useful as I do.
Did you enjoy this article? I'm selling whole books full of them! Volumes II and III are now out! They're available as ePub, PDF, print, and on iBooks and Kindle.Click here for more information.
I tossed together a python script that does the same thing (based on Mike’s code, actually), but preserves the filename and version #s into the title bar of FileMerge. Not so simple and elegant as Mike’s solution.
Or whatever you name the script you put in /usr/bin. On that note, you do not need the .py extension. Also you may want to make the header on your python script ”#!/usr/bin/env python”.
This doesn't work for me on OS X, I get the following:
Index: css/debug.css =================================================================== exec of 'svnopendiffshim.py' failed: No such file or directorysvn: 'svnopendiffshim.py' returned 255