Monday, August 30, 2004

cvs2svn

The move to Subversion was pretty smooth (though I haven’t yet switched to Trac), and I am in general very happy with it. I was finally able to do some folder and file restructuring, which I had been putting off because of CVS.

One of my favorite features of Subversion is that it stores checksums of each revision of each file in the repository. It can actually verify the contents of the repository, and I’ve written a little shell script to do this regularly. Sounds pretty basic, but I’ve had problems with parts of CVS repositories going bad, and not noticing until months afterwards.

In order to speed up network operations, Subversion keeps pristine copies of the checked-out files in its .svn/text-base folder. When you commit a file, it sends the database the differences between the pristine file and the one that you’re checking in. It seems like this could lead to repository corruption if the pristine copy gets damaged, but Subversion protects against this by not letting you check in a file if its pristine copy has the wrong checksum.

The one snag I ran into is that the default settings of cvs2svn corrupted some of my Localizable.strings files and that I was later unable to check in changes to these files. When committing, I would get this error message:

Transmitting file data .svn: Commit failed (details follow):

only Subversion wouldn’t print any further details. The problem was that, by default, cvs2svn sets the svn:eol-style property on text files, and that it thought my UTF-16 .strings files were text. From now on, when I use cvs2svn, I will invoke it with these options:

cvs2svn --no-default-eol --keywords-off --cvs-revnums

7 Comments RSS · Twitter

Be sure to blog your install of Trac. I'm thinking of moving to it and I want to count the arrows in your back. :-)

Did you have to install a dbm module for python? I am getting an error when I try to use cvs2svn, but I want to use the fsfs back end of svn anyway.

Building python from source solves the problem.

Yes, I had to install bsddb3. It's used by the cvs2svn script itself, so it doesn't matter if you're using fsfs.

We use the FSFS option at my workplace, and it seems to be more robust across file systems as well as across multiple access methods. Coupled with the fact that it's lower maintenance, I don't see a downside to FSFS, and I wish it were the default.

---J

[...] Naturally, when I switched from CVS to Subversion, I switched from CVSTrac to Trac. I like Trac even better than CVSTrac, except that it’s kind of a pain to install. When I got my iMac Core Duo I started thinking about building a universal binary version of Trac and realized that would be even more of a pain. [...]

[...] whole trees, and easier tagging and branching (albeit by shoe-horning them into the tree). Switching was an easy decision. I remained happy with it, especially with the more reliable FSFS backend and [...]

Leave a Comment