Out of all the version control software that is available, Subversion is still my favourite. Git is decent, but I don’t know it well enough and have yet to find a compelling reason to learn it. Subversion does everything I need it to, and on the Mac, Cornerstone helps.

Cornerstone is a GUI Subversion client that recently got a whole bunch of really useful new features. It is the only GUI client that I use — if I don’t use the GUI, I’m working on the command line. The nice thing about Cornerstone is that it accommodates the way I work and doesn’t throw a fit or get in the way if I want to work in the Terminal.

Cornerstone 2 comes in with an impressive list of new features that really makes me glad I opted to go with it compared to alternative clients for the Mac. One of the new features is support for merging branches, complete with conflict management and previews. As a result, it also better supports tagging and creating branches.

The comparison view is more enhanced as well, allowing you to see the differences within lines, not just that the lines are different. You can also search in the compare view.

A welcome feature is the addition of showing how many changes there are to a repository in the Working Copies column. This lets you know if your working copy is up-to-date, or if there have been commits since you last updated it and, if so, how many. This works well with the view of uncommitted changes that appears in the Working Copy view.

Figure A

New Annotations view

Cornerstone now has an awesome annotations view. This is perhaps one of my favourite new features in Cornerstone. When navigating a source tree, you can click the “Show Contents” button when you’ve selected a particular file. In this view, hit SHIFT+CMD+ENTER and annotation view will turn on (Figure B). Here, Cornerstone will colour code chunks of the file by author; so you can see at a glance who touched what piece of the file and when. There is a legend window that lists the authors, and how much of the file belongs to them. You can also traverse a timeline of commits to see what was changed and when. You can click on any of the coloured blocks on the side to see what revision it was changed or added in, the date, who did it, and the log message corresponding to the change.

Figure B

It’s this kind of information that makes Cornerstone invaluable to a developer. You can obtain it using the Subversion command line tools, but not this quickly or conveniently. Cornerstone makes it easy to visually dissect files, whether it is in the annotation view, the log view, or comparing one revision to another, and so forth. Cornerstone makes working with Subversion repositories extremely friendly.

SASL authentication

Also new with Cornerstone 2 is support for SASL authentication, which allows you to tie svnserve together with stronger SASL encryption and also allows for the use of Kerberos or LDAP for password storage, on the server side. I have kerberized HTTP/HTTPS-based Subversion repositories here (using mod_auth_kerb with Apache) and that kind of repository has worked since the previous version, but with Cornerstone 2 the Kerberos support extends to svnserve SASL-enabled servers — something that is likely to make Cornerstone very compelling for internal development use, or where high security solutions like Kerberos are deployed.

Repositories support

Another feature I like about Cornerstone that really makes this a polished GUI client is the Repositories support. This allows you to navigate remote Subversion repositories without first checking out a working copy. This really helps me when I just need to poke around in a Subversion repository (i.e. to generate a patch) and don’t want to check out a full working copy. And the lovely thing here is that all the features you get with a working copy, such as the annotation view, the log view, comparison views, etc. all work. Slower, obviously, but that is due to more information having to be pulled down — information that would already exist if you had checked out a working copy.

And finally, one tip with the Repositories setup. If you right-click on a repository, you can select the Issue Tracking… menu item. This will allow you to do pattern matching on log messages to open a bug tracking system like Bugzilla just by clicking on the link. It uses a regular expression mechanism to match and create these clickable URLs. Many are quite easy and Cornerstone provides some defaults; for instance, if a message contains “fixes bug #123” and you know the Bugzilla URL, you can define the Issue # Pattern to be #number and the URL Format to be http://bugzilla.foo.com/show_bug.cgi?id={number}. Using Webkit as an example, they use full URLs, so in that instance I used: (?<url>https\://bugs\.webkit\.org/show_bug\.cgi\?id=\d+) as the regular expression to match and used {url} as the URL Format. Now, when in the log view, any matching expressions will be clickable links to open the appropriate bug in that project’s bug tracking system.

All in all, Cornerstone version 1 was a great Subversion client. Cornerstone 2 blows it away with so many useful features that it is absolutely worth the upgrade. I have yet to find another GUI Subversion client on OS X that provides this level of functionality combined with ease-of-use and polish. Cornerstone 2 improves upon the previous version in so many ways, including the speed department (which was a complaint I often had about the previous version). All things considered, this is definitely worth the upgrade.