Meta-CVS
Meta-CVS builds a more capable version control system around CVS. Its primary improvement over CVS is directory structure versioning, but it has also acquired easier branching with automated merge tracking, and smarter handling of file types, versioning of symbolic links, execute permissions and in fact arbitrary property lists, and much better support for tracking third party sources.

There is a Freshmeat page and a home page. It's also been discussed on Advogato

Meta-CVS uses CVS without any modifications, as a separate process, and is written in Lisp. This is important because CVS is fragile code that has been debugged for well over a decade. The avoidance of modification to CVS and use of Lisp means that Meta-CVS is very stable. The decoupling also means that there is not only fault isolation between Meta-CVS and CVS, but installations of the two can be independently upgraded. Specific version of Meta-CVS don't target any specific versions of CVS. It has been tested with various 1.10 and 1.11 versions of CVS.

Thanks in large part to the Lisp programming language, Meta-CVS was developed rapidly. Within three weeks of development it was already used for versioning its own sources, and files were already being renamed. This happened before the software was even packaged as a command line utility; it was a set of functions loaded into a Lisp session, and invoked interactively through the read-eval-print-loop.

Meta-CVS has effectively offloaded a whole bunch of thorny problems from the CVS project's consideration, which can focus on the remaining architectural and performance issues. Whereas support for renaming and symbolic links can be done in a separate layer, fast tagging and atomic transactions can only be provided within CVS.