The biggest problem in CVS is the lack of integrity checking. A repository can have individual files go bad and have it be non-obvious for some time. Long ago, it was desired to preserve all history for a CVS->Subversion move I was involved with, and it turned out there was corruption that meant that one file could not be accessed before a certain point in the history. We wound up just doing a repository scrape instead.