The directory /pike/home/marcus/cvs2svn-1.3.1 (world-readable) contains my scripts and control files. The conversion is done in multiple steps, because there were different classes of problems which needed different approches to solve. The first step joins the dumps of the different cvs repositories into one merged dump, weeding out duplicate commits (and also verifying that they are indeed identical). This is controlled by the file "specs", which specifies the times when the repositories where copied, and which destructive modifications where done to the dev repository afterwards. The next pass moves the destructive operations forward in time from the split point to where they actually happened, again weeding out any duplicate commits on the way, and checking that they are identical. It also handles copies, and removes some bogus tags and branches. This is controlled by "specs2". Finally there is a "specs3" which handles the ulpc and ulpc.old stuff, which wasn't originally included.
Unfortunalely, this doesn't cover all the bases. There is also some weirdness in the SSL module (IIRC it was originally maintained in a separate repository, but has common tags with the main repo) which were easier to fix by simply stomping on the ,v files a bit. This is done by the sslfix script. (Please don't run this on pelix unless you know exactly what you are doing.) Also, the merger.pike script has some fudge for special situations that cropped up and which didn't lend themselves to any general solutions. This was typically cases where the sanity check would fail to acknowledge that a commit (typically the creation of a tag) was identical in two repositories, but an ocular inspection showed that the differences were immaterial so long as the commit from the older repository was used (which is the MO of the script anyway).