Convert-repo is a generic repository conversion framework. It can be found in contrib/convert-repo in the Mercurial distribution. The development version currently supports importing from Git and CVS and exporting to Mercurial. Run it as follows:
$ convert-repo [-q] [--datesort] <src> [<temp-dst> [mapfile]] $ hg clone <temp-dst> <final-dst>
Repository types of src and dst are automatically detected. If dst doesn't exist, it is automatically created as a Mercurial repository. If dst isn't specified, it defaults to src-hg. If mapfile isn't specified, it's automatically created (in dst/.hg/shamap for Mercurial).
CVS support is currently only available in the development version. It uses cvsps to determine changesets and communicates directly with cvs server or cvs pserver to extract file revisions. CVS branches are translated to Mercurial named branches. If you'd like to use the preferred repository-per-branch model, these branches can be separated out into their own repositories with hg clone -r <branch> project-hg project-<branch>.
This support is still experimental and the following features are still missing:
- username remapping
- keyword expansion (disabled by default)