Moving from VSS to SVN

Now that the development phase of our release cycle has end, and the last minute tweaks have also stopped, I have spent the last two weeks moving our development source control from Visual SourceunSafe to Subversion.

The first task was to dump our two main repositories into SVN dump files. I was not the first team in our group to make this move (this helped getting approval from my technical lead). I was handed the other team’s python conversion script. This was based on the state of the VSS2SVN project (a few years ago), but heavily modified to just do the required job. I had some problems running the script on our repositories, so went to see how the current project had improved.

The current VSS2SVN have changed from Python to Perl and stopped using the VSS COM API, to using their own archive reading tool. Because they can read/recover stuff the COM API could not handle. Spooky, it’s reading things like that, that gave me the energy to keep plodding when things got tough. Our smaller repository converted with only ~20 problems, files reported as missing parents when all versions could be seen, and retrieved via the VSS client. The larger (and shared with another team) repository just was unhappy.

After reading ~4 months worth of mailing list, I knew what/why things weren’t working as I wanted. The long and short of it is, the VSS2SVN project is trying to port the complete history of the project to SVN, which I could see as a good thing. But for our needs, it is not what we need, I trust VSS for what it currently has, I just don’t trust it going forward. I want the current live tree, and all the history (changes and notes) for that current tree. I don’t want the file moves or the likes.

So now knowing what I really want, I went digging, and found a Perl script doing this thing, I had trouble getting it working (eg, it didn’t work in the first few minutes), so I decided you try the Python script again. The perl was laid out really clean, but I have always had this mental pictures of Perl been spaghetti.

So I picked up the python code I was handed at the beginning of that week, and now with all my incite/understanding, I got it working in ~3 minutes. First repository dumped as sweet as you could dream. The second had issues, as some really old files didn’t have the first n versions there. You could see it, just not retrieve from the VSS archive. So I altered the code to return “This version could not be found” and then it also dumped.

I’ve spent this week sorting out of the shared files (auto within the same repository, and manually between repositories). I’m getting to the happier place. And soon will be ready to unleash it on the rest of the team. He’s looking forward to using the new tools.

We are upgrading from VS 6.0 to VS 2005 at the same time. Ah things are starting to look better all the time. I will also not have to maintain two copies of all my work. Good tools are so nice. Now to move from char* to std::string, that may be a longer term project…