This is a python script which converts a CVS repository to an SVN Repository.

It works by:

  * using the rcsparse/ module to directly read the CVS repository
    and deduce commits,

  * creating a bunch of temporary scratchwork on disk,

  * replaying all of the commits into an SVN dumpfile,

  * loading the dumpfile into an SVN repository.

Most of the script was written by Greg Stein (gstein@lyra.org) and
Daniel Berlin (dberlin@dberlin.org), with tweaks from Marko Macek
(Marko.Macek@gmx.net) and Karl Fogel (kfogel@collab.net).

The script works reasonably well, with two big caveats:

  - it doesn't do branches or tags yet

  - there may be tiny bugs in the way it deduces CVS commits.

That said, the script has been used on straightforward CVS
repositories with no real problems.  As an example, the whole first
year of Subversion's own history was converted from CVS into a 3000+
revision svn repository.  It took about 30 minutes.


* Prerequisites:

  - Install RCS.  cvs2svn uses the "co" command.  The RCS home page
    is http://www.cs.purdue.edu/homes/trinkle/RCS/.

  - Get at least Python 2.0; see http://www.python.org/.

  - Make sure you have GNU 'sort' installed, or some other sort
    program that handles large files other than by reading them
    entirely into memory.  GNU sort is part of the coreutils
    package, see http://www.gnu.org/software/coreutils/.

  - If you're not running cvs2svn.py from this directory, then make
    sure to install the rcsparse/ tree somewhere where Python can
    find it.  Note that it's a CVS working copy, so we can update
    it easily :-).  Except for 'compat.py', which comes from
    viewcvs/lib/compat.py.

    Rcsparse is currently part of ViewCVS, see
    http://viewcvs.sourceforge.net/.  Someday rcsparse will be an
    independent Python project, and then we can depend on it in a
    more normal way.


* Basic usage:

  To create a new Subversion repository by converting an existing CVS
  repository, run the script like this:

     $ cvs2svn.py --create -s NEW_SVNREPOS CVSREPOS

  To create a Subversion dumpfile (suitable for 'svnadmin load') from
  a CVS repository, run it like this:

     $ cvs2svn.py --dump-only --dumpfile DUMPFILE CVSREPOS

  To see more options, run:

     $ cvs2svn.py --help
