Although Xcode includes support for managing source code repositories, given this is not the primary focus of the tool, it doesn’t have all the bells and whistles of a client dedicated fully to the job.
In this post I’d like to introduce Cornerstone, a comprehensive Mac application for managing Subversion source code repositories. Let’s begin by looking at the primary work area, which is shown below:
The repositories are on the lower left, where the available local working copies are on the upper left. At a glance you can see that first two repositories are managed by Beanstalk (a cloud-based source code repository – more on that in an upcoming post). Also, notice in the working copies area that the number of changes in the local versus the repository is clearly labeled. The files that have changed are shown in the file list with an indicator ‘M’.
In the screenshot below I’ve collapsed the file hierarchy – notice that Cornerstone shows an arrow pointing down, which indicates where the files are located that have changed, very handy when you have project with many files and/or branches and need to quickly drill down to the locate the changed files.
If you open the Inspector (icon is in the upper right), you can view general file information, working copy status and other related information. In addition you can specify the application to use when opening files (when double tapping files in the main window).
I appreciate that the designers and developers of Cornerstone understand the importance of little details. Check out screenshot below, which is the Cornerstone icon as shown on the Dock, at a glance it’s clear that two files have changed in my local working copies.
Working with code repositories is straightforward. Upon choosing to add a new repository, a dialog is shown with a number of options, from cloud based services, to local file stores as well as remote servers (HTTP and SVN).
If you don’t already have access to a repository, I found working with Beanstalk to be a breeze. No need to worry about system configuration, server maintenance, and all the other details that go into managing a source code file system. Even better, you can give Beanstalk a try for free, simply choose the option to sign up for a repository.
If you have a working repository that is already configured, Cornerstone makes the process of connecting as easy as entering the server/port information, repository path, username and password.
Look for more information on Beanstalk in an upcoming post.
File Comparison (Diff)
One area that Cornerstone really shines is file comparson. Check out the screenshot below, which shows the basic file compare layout.
Notice that Cornerstone does a nice job of syntax highlighting, this works equally as well across various languages.
The blue shaded areas highlight changes to a line(s), red indicates deletions and green shows insertions.
Cornerstone also has a number of options for easily configuring the compare information. In the figure below I’ve drawn an orange box around the options. From the left to the right the options available include: show whitespace differences, show line ending differences, show line differences, set tab width, show line numbers, show invisibles and show annotations (more on this in a moment).
And how about this, you can even compare images. For example, the screenshot below shows the local and repo copies, at a glance it’s obvious that the image color was changed and the image size was modified.
There are many very nice features in the file comparison view, I recommend you take a few minutes to poke at the icons and drop-downs to learn more.
Annotation provide a glimpse into the lifecycle of a file, describing what changes have been made, by who, at what time.
The screenshot that follows provides a peek into how Annotations look. With this particular example, there is only one user (guess who) that has made changes. However, Cornerstone will display additional colors in the view for each user who contributed to the file, and each user will be shown in the legend at the bottom of the display.
As projects get more complex, with multiple developers, Annotations can help to quickly provide the history of changes in an easy to read visual format.
One feature that I find very intuitive is the option to drag/drop files from Cornerstone to my Mac or vice-versa. This makes adding files to a repository a no-brainer.
As with any good code management system, Cornerstone provides robust support for branching, merging and tagging.
There is also a Log View feature which provides a consolidated view to browse project changes. Timeline offers another perspective, showing a running sequence of revisions, with additional options to browse and compare revisions.
Based on my work with Cornerstone, one feature that I think would add great value would be further integration with Beanstalk. Specifically, the option to create a new repository directly from within Cornerstone. As it works today, you need to create a new repo at Beanstalk and then reference that repository from within Cornerstone.
Next week I’ll write in more detail about Beanstalk, a cloud based repository for source code, which offers an equally impressive set of features for managing your code and projects. The two tools work hand-in-hand to offer a comprehensive source code management system.