I have done this with a similar repository under similar circumstances, but 
using Mercurial.

I proceeded as follows:
1.  I imported the CVS head branch straight into Mercurial using Tailor in the 
standard way.
2.  For each of the branchpoints of the branches I was interested in, I found 
the mercurial revision that matched the branchpoint by manually trawling 
through the CVS logs and matching them up with the mercurial logs.
3.  I created a separate tailor project for each of the branches I wanted to 
import.  The project was a straight-line import of the branch (with 
start-revision = <branchname> INITIAL).  I didn't run tailor yet, however...
4.  For each of these tailor repositories, I cloned the mercurial repository 
into the shared source directory (where tailor would normally create a new 
mercurial project for the branch), but I only cloned the history up until the 
revision that I wanted.  I then removed all working files (anything that 
would interfere with CVS doing a checkout of the branch there).  I only left 
the mercurial repository, in .hg .hgignore and .hgtags; all other files were 
deleted.  (If you leave files that match the CVS ones, CVS will generate an 
error when it tries to check out the repository).

At this point, Tailor thinks that there is no repository there.  When it 
thinks that it is creating a new file or directory, it is really just putting 
modified files into mercurial.  And the initial checkout matches the version 
already in mercurial, so there is no delta for the first commit.

5.  I then ran tailor on each of the branches, ending up with several 
repositories, with a straight line history for each branch, but all with the 
same "base" tree.
6.  I then pulled all of the changes from all of the repositories together 
into one repository.

Most of the problems that I had were when people had on a branch modified the 
CVS repository directly, and with various bugs in CVS that had to be worked 
around (I submitted patches for these to Tailor).

I also had to patch CVS to stop it from waiting for 1 second between each 
operation; with over 50,000 CVS commits it would have taken a long time 
otherwise.

As it was, it took a couple of hours for the cvs HEAD and from several minutes 
to half an hour for the branches depending upon how many commits there were.

Hope this helps,
Jeremy




On Tuesday 05 June 2007 13:20, Kelly F. Hickel wrote:
> Just found this tool yesterday, and I'm trying to see if it can
> reasonably convert our cvs repo into monotone, to help us make the
> switch.
>
>
>
> At the moment, I've been running it on a single cvs module and I killed
> it after 700 cpu minutes.  This is a heavily used repo, 6 or 7 years old
> with constant development by 20 or so developers, and thousands of
> branches and tags.  I don't really care about most of the branches, just
> the 3-4 main development lines.
>
>
>
>  I see that one of my options is to specify a particular branch. My
> question is, if I do this conversion in several steps, say I first do
> HEAD, then the 3 or 4 other branches that I care about, will tailor link
> up the revision history properly the second, third, or four time I run
> it with different branches?
>
>
>
> The goal of course is to end up with proper revision history and
> branching for the 4 or so branches I care about in monotone.
>
>
>
> Thanks,
_______________________________________________
Tailor mailing list
[email protected]
http://lists.zooko.com/mailman/listinfo/tailor

Reply via email to