Package: rcs4cvs2svn
rcs4cvs2svn prepares an RCS project for processing with cvs2svn.rcs4cvs2svn is useful for developers who still have ancient source code
floating around in RCS repositories and want to move it to a modern SCM system.While rcs4cvs2svn does not provide any possibility to directly migrate to any
other SCM system, it creates a copy of your RCS repository that can be
processed bycvs2svn.That way, you’ll end up with a Subversion repository, which already may be
sufficient. Alternatively, Subversion offers a sound base for further migration
to another SCM such as Git or Mercurial, as most SCM vendors provide tools to
migrate from SVN but not from RCS.(You can of course use rcs4cvs2svn as replacement for various rcs2cvs scripts
floating around. Unlike many of these scripts, rcs4cvs2svn can process
filenames with space characters and handles any errors it encounters.)UsageUsage is simple:$ python rcs4cvs2svn.py /path/to/rcs/project /path/to/cvs/repositoryThere are a couple of options, for more information run:$ python rcs4cvs2svn.py --helpTutorialThis section describes how to migrate an RCS repository to
CVS and then to Subversion.First, create a simple RCS repository for a project called “hello” which
contains a single file, “hello.txt” with 2 revisions:$ mkdir -p hello/RCS
$ cd hello
$ echo "hello world!" >hello.txt
$ echo "Added greetings.\n." | ci -u hello.txt
$ co -l hello.txt
$ echo "hello space!" >>hello.txt
$ echo "Added more greetings.\n." | ci -u hello.txtNow migrate the the RCS repository to CVS:$ python rcs4cvs2svn.py hello/ /tmp/hello_cvs/The output should be:INFO:rcs4cvs2svn:create new CVS repository at "/tmp/hello_cvs/"
INFO:rcs4cvs2svn:migrated 1 files from "hello/" to "/tmp/hello_cvs/"Because CVS still is a very dated way to manage a software project, let’s move
on to the next step of evolution: Subversion. You will needcvs2svn,
available from <http://cvs2svn.tigris.org/>.While there are several ways to convert CVS to SVN, the easiest for our task is
to simple create a SVN dumpfile containing the CVS as trunk:$ cvs2svn --trunk-only --dumpfile hello.dump /tmp/hello_cvs/Now you can create a SVN repository and load the trunk into it:$ svnadmin create /tmp/hello_svn/
$ svnadmin load /tmp/hello_svn/ <hello.dumpMoving on to even more advanced SCM systems is left as an exercise to the
reader.LicenseCopyright (c) 2006-2011, Thomas Aglassinger. All rights reserved. Distributed
under theBSD License.Source codeThe source code is available from <https://github.com/roskakori/rcs4cvs2svn>.Version informationVersion 1.2, 2011-10-26Fixed logging which could cause issues with file names containing non ASCII
characters or percent signs (%).Improved handling of CVS target folder, which can now be a relative folder
even thoughcsv initexpects an absolute folder.Improved API: Addedrcs4cvs2svn.main(), which can be called from Python
similar to the command line.Changed test shell scripts to proper unit test.Cleaned up PEP8 issues.Version 1.1, 2010-07-06Added automatic creation of CVS repository in case the target path does
not already contain aCVSROOTfolder. In order for this to work, thecvscommand line client has  to be installed.Fixed protection bits in CVS which were copied from RCS and did make the
files write protected (which was not an issue for converting to SVN but
forced the user to remove the CVS for repeated conversion).Cleaned up API. Simplyimport rcs4cvs2svnand callinitCvsRepository()andconvertRcsToCvs()as needed.Version 1.0, 2010-07-04Initial public release.Version 0.9, 2006-05-01Initial internal version used to convert some of my own projects.