This program analyzes a collection of RCS files in a CVS repository (or outside of one) and, when possible, emits an equivalent history in the form of a fast-import stream. Not all possible histories can be rendered this way; the program tries to emit useful warnings when it can’t. The program can also produce a visualization of the resulting commit DAG in the DOT format handled by the graphviz suite.

Build prerequisites are explained in the toplevel buildprep script, which you may be able to run to get all the packages you need.

This program could have been called rcs-fast-export with equal appropriateness; the cvs-fast-export name was chosen to avoid colliding with a pre-existing script with that name by Giuseppe Bilotta.

The analysis stage of this code originally travelled as parsecvs and was written by Keith Packard in early 2006. It was briefly maintained by Bart Massey before passing to Eric S. Raymond in late 2012; ESR wrote the fast-export output stage and renamed the program to reflect its new function. More historical details are in hacking.asc.

The distribution includes a tool, cvssync, for fetching masters from CVS remote repositories so cvs-fast-export can see them. You will need rsync installed to use it.

A wrapper script called cvsconvert runs a conversion to git and looks for content mismatches with the original CVS.

Also included is a tool called cvsstrip that strips content out of trees of RCS/CVS masters, leaving only metadata structure in place. If you encounter a bug in this program, sending the maintainer a reduced version of your CVS tree greatly decreases the expected time to fix.

A more detailed guide to effective bug reporting is at reporting-bugs.adoc. This code has a regression-test suite; invoke it with make check. You will need RCS and CVS installed to run the tests, but they’re not required for production use of cvs-fast-export. Installed CVS is also required to use the cvsconvert wrapper script.

A make check can fail in obscure ways if you don’t have all the required tools installed; you’ll need CVS and Python. If you get complaints indicating that *.repo files don’t exist, install these tools and try again. A make clean in the tests directory might be required to clear out debris.

Warning: The regression tests will fail spuriously if your CVS lacks the MirOS patches. These are carried by Debian Linux and derivatives; you can check by Looking for MirDebian in the output of cvs --version.

See also the NEWS.adoc and TODO.adoc files. There is an (incomplete) tour of the internals in hacking.adoc.

If you find this code useful, please support me on Patreon.