This program is supplied in source form only, use it at your own risk, there is no implied usability, and verify any converted data before using it in a real envirionment. This program is not a final product and should be considered ALPHA code. That said, this is the code we used to move from CVS/CVSTrac to SVN/TRAC. I am only publishing the code to help others in their attempts to convert from CVSTrac to Trac.

I wrote this program after a lot of searching on the web and being unable to find any other code to work from. You see a lot of blogs talk about the conversion but none show any code or examples of how to do it. And it is not as simple as "pulling a couple of tables across". Plus the documentation on CVSTrac's Database and Trac's Database are lacking in substance. I did a lot of digging in source code to find out how some of the fields worked. Note that you WILL have to fix your Trac Workflow section to match the final data.

This program was designed around our CVSTrac data, we were using version 1.x with sqlite 2, and Trac 0.11 (as of 8/20/2007). Depending on you situation you will need to make some changes to the code.

The program is written in Borland Delphi 7 pascal. It reads the data directly from the CVSTrac sqlite db file and writes the data to a TRAC sqlite db file.

You need to create the Trac db file with TRAC-ADMIN first. The CVSTrac db file needs to be in sqlite 3 format (see notes on how to convert it from version 2).

Almost all data is converted.


Ticket Modifications




Attachments are not converted. (I couldn't find out how they worked in our version of CVSTrac).


The program will also create a passwords file for Trac in Digest mode and the special fields section of the CONF/trac.ini file based on the data in the CVSTrac db. The password assigned to each user is the same as the user name. The conversion of user rights is very basic and you will have to manually tweak it. Trac has more rights than CVSTrac. Additional user info is also converted.

You will also need to modify the code to enter the CVSTrac Severity and Priority strings your CVSTrac uses. These strings are coded into CVSTrac and are not in the database. You may also have to tweak the source depending on how your site used the Severity/Priority fields and how you want them converted to Trac.

The Wiki conversion does it's best to clean out the CVSTrac setup and usage pages during conversion, so only the Wiki pages you added will be kept. Also all different versions (edits) of the Wiki pages are converted.

The Tickets and associated tables are converted, ticket modifications are kept, Ticket numbering is retained. So when you convert your CVS repository to an SVN repository you can relink all the tickets to their checkins. (use the cvs to svn conversion to create an svn dump file, then use svnadmin to process the dump file with the post check in hook processing turned on. the TRAC SVN post check in script needs a minor tweak to accept the #nnn format that CVSTrac used. See the code below).

Milestones are converted (type 1 & 2) but Milestones added from CVS (type 0) are not converted.

Source download (zip)