Rants And Raves


Daddy Still Needs A New Subversion GUI

March 22, 2006

As I mentioned in my previous post, I'm looking for a GUI-based Subversion client that gives me a certain set of basic functionality necessary for managing my personal software projects. I tried a handful of programs, none of which met all of my needs. One that I didn't try was eSvn, only because it came as a .pkg installer, and I said that I would give it a try later. Well, that time is now. Also, I found a few other programs to try as well. So, let part 2 of my review of various Mac OS X Subversion GUI front-ends begin.

eSvn

Let's start with eSvn, since it's a holdover from the last review. After double-clicking the .pkg file to launch Apple's Installer program, I used the Show Files command to find out what files were going to be installed where, so that I could easily remove the program if it turned out to be yet another dud. And boy, did it. The "Read Me" that displayed in the installer window indicated that eSvn required me to have Qt/Mac 3.3 installed on my computer. I went ahead with the installation anyway, and sure enough the program wouldn't launch once it was installed. Having gone this far, I figured I might as well look into the possibility of downloading and installing Qt so that I could finally get eSvn running. The only URL that eSvn's "Read Me" document provided for Qt was for the main Trolltech page. So I visited the page and blundered around, looking for a runtime library to download.

I was completely unable to find such a thing. It quickly became clear that Qt, and likewise the web site for Qt, was geared toward developers rather than end users. Apparently developers are expected to build Qt into their own programs rather than make users install it separately as a library. So the only way to obtain Qt would be to download the actual development kit, and that costs money. There was a brief mention in the FAQ of the Qt Open Source Edition, which is free for use in open source software, but there was no link to more information about it.

So, once again I had to trash eSvn without actually getting to try it out. And this time, there's no "I'll try it sometime later". By not actually distributing Qt with their product, but rather expecting end users to install it themselves, the creators of eSvn really dropped the ball. It's just as well; from the screenshots on the eSvn web site, it is clear that eSvn fails to meet my needs, by lacking a visual diff feature. For if it had such a feature, surely this would be worth showcasing in a screenshot, whereas one of the screenshots instead shows a diff window containing the textual output of Subversion's diff command. Add to this the fact that the last stable version, 0.6.11, is from July of 2005, but the last version for which there's a Mac OS X distribution is 0.6.8 from January of 2005, and there's just not much promise there.

iSVN

Next up is iSVN version 0.9.5a2, which is a Mac-only program. Even though it's alpha software, it should be better than eSvn, since "i" is a whole four letters more than "e". iSVN is perhaps the most Mac-like program of the bunch, having both a standard Mac toolbar, and an item list pane on the left side of the main window, similar to such Apple programs as iTunes and Mail. This list pane is for local working copies; create a new item, choose a local folder that contains a Subversion working copy, and you can now manage that local copy. You can see what files have been modified or added, you can commit changes, and like svnX (covered in the previous post), it even integrates with Apple's FileMerge to provide visual diffs. And unlike svnX, there are contextual menus providing quick access to a number of tasks.

iSVN even has a feature to browse the repository, though the menu item is only enabled when you have an item selected in the working copy list. So presumably it only allows you to browse subprojects in the repository that correspond to working copies, rather than freely browse the entire repository tree. I say "presumably" because the feature doesn't work. In the browser window, where the file list should be, there is instead what looks like part of a Subversion error message.

iSVN holds a lot of promise, in part because the latest version is less than two weeks old, indicating active development. But it is unfortunately quite obviously alpha quality software. Some features don't work, some of my required features are missing, and some behaviors are quirky. So for now it is not a keeper. But it is definitely worth revisiting in a year or so to see if it has matured into what it shows the potential to be.

RapidSVN

RapidSVN 0.9.1 is a cross-platform program that uses wxWidgets. Though not as Mac-like as iSVN or svnX, its design is quite functional. It has a single main window with a tree pane on the left hand side. The root of the tree is called "Bookmarks", and can contain both repositories and working copies. Right-clicking the root item brings up a contextual menu that allows you to add either type of item, each of which itself will then be an expandable subtree. Clicking an item in the tree, which only shows folders, causes the folder's contents to be displayed in the main pane of the window. For working copies, these items show their state, such as modified or not checked in, and a contextual menu provides commands for most operations.

This program also has a lot of promise; it looks like it has the potential to provide all of the desired features I listed in the previous post. But due to some non-Mac like behaviors, as well as some bugs and/or unimplemented features in this non-final release, this potential is not yet realized. For example, it provides a diff feature, both for comparing the working copy to the repository, and for comparing versions within the repository. Invoking the former causes the program to crash, while the latter simply fails more gracefully. Thus I didn't get to see whether the diff result is visual or textual. Also, the dialog for comparing versions within the repository provides controls for selecting which versions to compare, either by revision or by date, but these controls are completely non-functional, thus only allowing you to compare HEAD with HEAD. Drag-and-drop is not supported, so for example the "move" operation within a repository requires you to type in the path to the destination. Other less critical but annoying quirks include the fact that many item names in the tree appear munged, and the fact that right-clicking an item in the main pane does not first select it. The latter behavior means that you must click to select the desired item, and then right-click it to bring up the menu, or else the selected menu command will fail to operate on the desired item.

Like iSVN, this is another one to keep an eye on.

svn-up

Finally, we come to svn-up version 0.8.0. This is a cross-platform program, written in Java. Actually, its primary purpose seems to be as a plug-in for the Idea IDE, but it is also distributed as a standalone application in the form of a .jar file.

Getting this thing to launch was no mean feat. Double-clicking the .jar file resulted in an error dialog from the OS's Java Launcher, telling me to check the Console for error messages. Doing so revealed the error:

Exception in thread "main" java.lang.NoClassDefFoundError: org/tigris/subversion/javahl/SVNClientInterface

Luckily, I remembered that when I installed Subversion, it also installed the file /usr/local/lib/svn-javahl/svn-javahl.jar. So all I had to do was run:

java -cp /usr/local/lib/svn-javahl/svn-javahl.jar -jar svnup-0.8.0.jar

...which resulted in the same error as before. So I dug into the svnup-0.8.0.jar file itself, and looked at the manifest file, and saw that it was looking for a file called svnjavahl.jar (note the lack of a "-"). So I copied the svn-javahl.jar file into the same directory as svnup-0.8.0.jar, renamed it to svnjavahl.jar, and double-clicked svnup-0.8.0.jar to launch it. Success!

You know, these reviews of products that I'm able to quickly determine I'm not going to keep are becoming tiresome to write. So, suffice it to say that svn-up is an incomplete alpha-quality program, its UI is quite awkward in several places, its repository browser has hardly any functionality, it's not very Mac-like, and it probably also hates kittens.

The Verdict

What a waste of my time. I decided to do a part 2 of my review because I wanted to give eSvn a fair shake, and I managed to find a few other programs that I had missed the last time. Turns out that eSvn was a non-starter after all, and none of the others are currently keepers. So basically I'm still sticking with SCPlugin and svnX.

I've visited the SmartSVN web site again since my previous review, and it looks very promising, based on the feature list and the screenshots. This is not surprising, since it's the only one of the programs I've looked at that is commercial, and is at a release version. But as I mentioned in my first review, I can't use it until I have a server process set up so that I can access my repository using some protocol other than file://. And I don't know what that will involve, or how soon I will get around to trying to set it up. But it looks like it might be the right way to go.

Daddy Needs A New Subversion GUI

March 08, 2006

I recently installed Subversion on my home computer, because a certain open source project with which I've been involved has switched from CVS to Subversion. Once I had Subversion installed, I decided it was finally time to do something that I'd been thinking about doing for a long time now: I created a repository locally on my machine so that I could gain the benefits of source control for my various hobby programs that I write in my spare time.

I then started importing all of my software projects into the repository, using the svn command line tool. Now, the command line is great and all... well, actually it isn't. At least from an ease of use perspective. The reason I own a Mac and prefer programs that are "Mac-like" isn't that I can't handle the command line, but rather that I don't want to have to.

At my workplace, where I have to use Windows, we use TortoiseSVN as our standard Subversion front end. TortoiseSVN adds a submenu, containing Subversion-related commands, to the Windows Explorer context menu. It also tags the icons of local files with overlays that indicate each file's status. So if you have a local working copy of a project, you can see at a glance which files have been modified, added, or deleted without a commit, and you can right-click on them to perform operations like diff, update, commit, etc. If you right-click in a folder that's not a working copy of a Subversion project, you still get a smaller submenu that allows you to import the folder or browse the repository.

The repository browser is particularly nice. It allows you to work directly with the files in the repository, such as moving, copying, and deleting files and folders, via context menus and drag-and-drop. In fact, all of TortoiseSVN's GUI windows are fairly well designed and handy. It even has graphical diff capability, allowing you to see your changes before you commit them, or to see what has changed between two different revisions of a file.

Unfortunately, TortoiseSVN is a Windows-only product. So I set about finding a Subversion GUI front end for Mac OS X. I found a handful of them, and tried them out, and unfortunately, none of them meet all of my needs. And I don't believe that my needs are very demanding. I need an easy to use, Mac-like program that will allow me to work with a local working copy of a project that's in a Subversion repository, and allow me to work directly within the repository itself. For working with local files, I need to:
  • Be able to import a new project into the repository, or checkout an existing project to a new location on disk.
  • Be able to determine which files have been changed locally.
  • Be able to determine what files have been added or deleted locally, and which of those files will and will not be added to/removed from the repository on the next commit.
  • Be able to update, commit, and revert easily.
  • Get a visual diff of files that have been changed and not yet committed.
For working with the repository, I need to:
  • Be able to move, copy, and delete files and folders within the repository.
  • See what has been changed by a particular commit.
  • Get a visual diff between two revisions of a particular file.
All of these tasks should be doable by pointing and clicking, dragging and dropping, and using contextual menus. None of the programs I've tried provide all of these features, and not all features that do exist are easy to work with. Here's a rundown of what programs are available, and my experiences with them.

JSVN

JSVN is a cross-platform SVN front end written in Java. It is currently at version 0.8. It is available in source form, or as a .jar file. After downloading the .jar file, I double-clicked it to launch it, and was greeted with the following error message:

[JSVN Launch Error]


The instructions on the web page say to launch the program by typing the following command on the command line:

java -jar jsvn-0.8.jar

Strangely, launching in this way worked, even though on a Mac double-clicking a .jar file is usually equivalent to executing this command. Anyway, once I got JSVN launched, I got a sparse window with which I couldn't do much of anything. The window has a menu bar, whose menus have a combined total of 5 menu items, including Exit and About. The Checkout command seemed promising, but seeing as how I already had everything checked out that I wanted to work with, I really just wanted to connect to an existing working folder, and was unsuccessful at achieving this. So, into the trash JSVN went.

Subcommander

It's probably only fair to mention that at one point I went frantically searching for a Subversion front end that could perform a particular task. You see, I had accidentally botched the import command at the command line, and checked in a bunch of files in the wrong place. So I was looking for a program that would allow me to browse the repository and easily move these files to a different folder, preferably by multiply selecting them and then dragging them to where I wanted them. Subcommander 0.15.0, which is a cross-platform (Windows/Mac/Linux) application written using the Qt library, did not fit the bill. While it was easy to figure out how to connect it to my repository and get a nice tree for browsing around in, the move function was nowhere to be found. Furthermore, the browsing functionality was a bit deficient. The repository was represented by a tree structure, where each folder had a disclosure triangle at the left side, similar to the Finder's list view. But if you double-clicked on a folder, the view would move to that folder, and there was absolutely no way I could find to go back up a level. So, Subcommander went bye-bye.

eSvn

eSvn is another cross-platform, Qt-based application, and is currently at version 0.6.8. By now you might be noticing a trend, in that none of the programs mentioned so far are at version 1.0 yet. Subversion is not that new, and you'd think there would be more finished front ends out there for it. The aforementioned TortoiseSVN is at version 1.3.2, for example. Why can't someone in the Mac space be that on the ball? Anyway, I must confess that I did not actually try this program. It was one of the first ones I downloaded, and knowing that I had a few more to choose from coming up, and assuming (wrongly) that there would be one or two real gems among them, I was more willing to dismiss applications for more trivial reasons. In this case, it was the simple fact that it was distributed as a .pkg installer. I have a general policy against .pkg installers if I'm downloading a program just to try out without knowing whether I'll want to keep it. This is because they could potentially put files anywhere on the system, and to uninstall the program you need to hunt down all the pieces and delete them. For applications, I much prefer the more common Mac way of distribution, which is simply the application file itself that you can just drag onto the hard drive wherever you want to, and just throw it in the trash to get rid of it. In the interest of fairness, I should give eSvn a shot when I'm more in the mood to deal with its installer.

SmartSVN

This brings us to SmartSVN. I had high hopes for this one. Not only is it made by the same company that makes SmartCVS, which is the CVS front end I ended up sticking with the last time I went through all of this, but it's even at version 1.1.8! Unfortunately, I wasn't able to get it to connect to my repository. Since my repository is located on the very machine that I'm using, and I don't intend for anyone but myself to use it, I have no reason to set up a server process for it. Thus, I connect to it using the file:// protocol. My attempts to connect SmartSVN to my repository using the file:// protocol were unsuccessful, and it subsequently occurred to me to check the SmartSVN FAQ. It turns out that the very first item in their five item FAQ says:
The file:// protocol is not supported, because it would be technically very difficult to implement and the svn:// protocol is a very simple to set up alternative.
Um, yeah. First of all, if the file:// protocol is so difficult to implement, how come all of the other programs I've tried support it? Plus, while I'm sure the svn:// protocol is relatively simple to set up for those who have sysadmin experience, it's something I'd rather not have to go through just to try out one particular application. It's kind of like the .pkg issue, but worse, since I'd then have a daemon running at all times that I don't even need, save for one application written by apparently lazy programmers. Listen, if I were willing to get my hands dirty with all of this UNIXy stuff, I wouldn't be looking for a GUI front end in the first place.

Besides, while the Subversion documentation is generally pretty good, they don't even get to the details about setting up and administering a repository until chapter 5. Everything before that assumes that you're just an end user connecting to an existing repository. Which I am, after having figured out and executed the one command necessary to create my repository. And that chapter isn't terribly easy for me to understand; it's obviously written towards people who have sysadmin experience, and know how to set up daemons and protocols and Apache servers.

So, for now, file:// is what I have available to me, so SmartSVN is out.

svnX

svnX 0.9.6.4 (getting close to a final version!) is a Mac OS X native application. It allows you to browse the repository, and manage local working copies. The interface is a little clunky. There's a window with a list of repositories, and a window with a list of working copies, and in both cases adding a new item to the list requires filling in a dialog box with path names; there's no drag-and-drop. But at least there's a standard file selector dialog for selecting the path of a working copy.

Once you have a repository in the list, you can double-click it to bring up the repository browser. It's not nearly as functional as the one in TortoiseSVN. Unfortunately, a painfully obvious theme throughout the program is the lack of context menus and drag-and-drop. Most operations involve selecting an item and then clicking a button or toolbar icon. Even the menus are sparse; there are no menu items corresponding to the toolbar items, which means that these commands lack keyboard shortcuts as well. So much for Mac-like.

However, svnX is the application I ended up using to move the files that I had accidentally imported to the wrong place. Too bad I couldn't just select them and then drag them to where I wanted. I instead selected them and clicked the "svn move" button in the toolbar... and was greeted by an error dialog telling me to "Please select exactly one item to move." Grrr. So I moved them one at a time. Admittedly, it was still better than having to use the command line and type all of those paths by hand.

As you can imagine, the window for managing a working copy is clunky as well, but functional. You can view the project folder either as a tree or a flat list, and when viewed as a flat list you can opt to hide all files that are unchanged. Adding, removing, committing, etc. involves selecting files and then clicking the appropriate command button. And multiple selection actually works in this case! Another neat thing is that svnX provides a visual diff between a changed local file and the repository version by handing off the job to Apple's FileMerge program, which comes with Apple's developer tools. Unfortunately, there seems to be no way to diff a local file against any version other than the latest, nor to diff two versions within the repository.

SCPlugin

Last, but not least, there's SCPlugin. This product is basically a sort of clone of TortoiseSVN, for Mac OS X. It puts a Subversion submenu in the Finder's contextual menu, and icon overlays on items in local working copies. Like eSvn, SCPlugin comes as a .pkg installer file. However, I was willing to install and try it anyway, for two reasons. First, by the time I got to SCPlugin, the pickings were slim, and I was getting desperate. Second, this software is not an application, but a set of plugins, which is exactly the type of thing you'd expect to be distributed as a .pkg file.

Since TortoiseSVN is so great, surely a clone of it must be nearly as good, right? Wrong. Where do I start? First of all, the latest news item on the web site, which is from December of 2004, states that the old code is being scrapped, and the next version of SCPlugin is being rewritten from scratch. The only binary distribution available for download is the last "old" version, which is version 269. (Wow, the higest version number of all the programs listed here!) Then there was installation. After installing the thing, it didn't work. No Subversion submenu in the Finder menu, no icon overlays in my Finder windows. So I had started hunting down and deleting all the pieces installed by the darn .pkg file, when I noticed that one of the pieces was a .prefPane file in the /Library/PreferencePanes directory. So I launched System Preferences, and sure enough there was an SCPlugin preference pane, in which I had to click a checkbox to enable it, and specify the path to the svn executable. Once I did this, the plugin worked.

Of course, there are problems. Strangely, the icon overlays don't always appear. When they're there, they're handy, but when they're absent it's annoying not to be able to see the state of the files. Another thing is that the contextual submenu doesn't contain as many items as in the screenshot on the SCPlugin web site. For example, there's no Import item for putting a new project folder into the repository. Finally, when invoking some menu commands, it presents a dialog requesting a user name and password, stating that the operation "may" require authentication. Like I said before, I'm using my repository locally, via the file:// protocol. I certainly haven't set up any user authentication, so I just leave the dialog blank and click OK. But SCPlugin doesn't remember that for the next time I invoke the command, so I have to dismiss the dialog every time.

[SCPlugin Authentication]

Other features that I want, nay, need, are missing. There's no visual diff. When you invoke the diff command, all you get is a window containing the textual output of the svn diff command. In a proportional font, even. And there's no repository browser, which means no way to manage the files in the repository, nor to examine the changes made to a file between certain revisions. In short, SCPlugin does not come close to meeting all of the needs I outlined near the beginning of this post.

The Verdict

So, does this mean that I've thrown away all of the Subversion GUI front ends I've tried, in favor of sticking with the command line? Certainly not. For now, I'm keeping SCPlugin and svnX. The former is useful for some of the basic management of local working copies, and the latter is useful when I need to work in the repository itself. At some point, I'll probably give eSvn a try. The .pkg installer really isn't a huge deal, and if there's a chance that this might be the gem of a program that I've been looking for, it's worth a try. Maybe if I'm feeling really adventurous, I'll set up an svn server daemon to enable the svn:// protocol and give SmartSVN a try. But that seems far less likely. But anyway, aside from those two untried options, it seems that the current state of affairs for GUI front ends to Subversion for Mac OS X is really poor.
1