Subversion 1.7 to 1.6 downgrade with MacPorts

MacPorts told me that there had been a subversion update (1.7.1), which I went ahead and installed. Woo! Huge speed improvements for everything I tried with the CLI client, great stuff. A short time later my IDE (PHPStorm) fell over screaming. It doesn’t like 1.7 yet, and it’s a bit stuck until SVNKit supports it. I should have checked really.

So how to downgrade? Fortunately this post makes it very easy. So I just did:

sudo port deactivate subversion @1.7.0_1
sudo port activate subversion @1.6.17_1

But now I’m stuck with a working copy in 1.7 format with uncommitted changes, and there is no tool to convert it back to 1.6 format. This is easily worked around; check out a new working copy (using svn 1.6) and sync across the changes, ignoring the .svn folders, like this:

rsync -av --update --exclude=".svn/***" ~/Sites/myproject1.7/ ~/Sites/myproject1.6

All happy now.

Subversion 1.5 repository upgrade on SourceForge

I’ve just had a slightly tricky time upgrading a subversion repository on sourceforge. They have recently added support for subversion 1.5 at the server end. 1.5 brings major new features for merging, but as it’s not backward compatible with older subversion clients, the upgrade is not done automatically. SF have also done a major rearrangement of their documentation while transferring everything to Trac, and it’s not always easy to get the right info. Normally to upgrade a subversion repo, you just run the ‘svnadmin upgrade /path/to/repo’, however, it’s not quite so simple on sourceforge as you don’t have direct access to the repo, and the instructions they give are slightly wrong at the time of writing. You’re likely to get an error like this (it’s not obvious that this is a fatal error) when you reload a dump file:

svnadmin: File already exists: filesystem ‘/svnroot/projectname/db’, transaction ‘443-0’, path ‘tags’
\* adding path : tags …

This is because load is intended to add files to an existing repo, not to replace those that are already there, so you need to wipe the repo and start from scratch.

So, here is a working command sequence that needs to be run from a project login shell on sourceforge (it applies to the project you’re logged in through, substitute your project’s name for projectname):

adminrepo –checkout svn
svnadmin dump /svnroot/projectname > svn.dump
rm -rf /svnroot/projectname/\*
svnadmin create /svnroot/projectname
svnadmin load /svnroot/projectname < svn.dump adminrepo --save svn

Yes, you do need to delete the whole thing and re-import it, but it’s quick and easy, and you have a backup in the dump file you take at the start. After the upgrade, make sure you get a new checkout of your project to ensure that you’re using 1.5 all the way through. Now you’ll find that commands like ‘svn merge –reintegrate’ work.