Meta-CVS

Posted 2 Nov 2002 at 19:40 UTC by atai Share This

Meta-CVS is a version control system built around CVS that offers many advanced features. It requires no change to the server side and works with the existing Free Software community infrastructure. Can it solve the complains about CVS? Does anyone use this tool? Please share your experience!

According to the Meta-CVS web site:
Meta-CVS is a version control system built around CVS. It is more capable than CVS, and is easier to use. Its main features are:

* Directory structure versioning. Under Meta-CVS, the directory structure of a project is versioned in the same way as the contents of its files. Concurrent changes to the directory structure are permitted. It an be branched, and merged. The program dynamically rearranges the structure of the sandbox as you obtain updates from the repository, switch branches or retrieve old revisions.

* Support for a promotion model. It's possible to start versioning local files, before making them visible to the project. This is done by selectively comitting the changes to the files, but retaining the directory structure change uncomitted until the new material is ready to be promoted to the project.

* User-friendly file type handling. Meta-CVS interactively handles file types when files are imported or added. It remembers, for instance, that .png files are considered binary so that when new instances of them are added, they are automatically treated as binary.

* Sane corner cases. Meta-CVS handles the use case when two or more developers add a file of the same name to the same location. It handles the case when someone removes a file that someone else is modifying. And it handles the case of files being removed and later added with a different keyword expansion mode. All of these cause problems in CVS.

* Simple branching and merging. Creating a branch, switching among branches and merging are simple commands that take one argument. The software keeps track of what has been merged where from what branch.

* Support for symbolic links and meta-data. Symbolic links are versioned objects in Meta-CVS. Files and symbolic links can have attached property lists, which are versioned. One standard property determines whether or not a file is executable, so in this way Meta-CVS versions the execute permission.

* Tracking of third party code containing moves and renames. Meta-CVS has an importing feature called ``grab'' similar in concept to CVS vendor branches, but with significant differences. When a snapshot of code is grabbed onto a branch, the program analyzes the contents of apparently added and removed files to determine which of them are actually moves. An ordinary branch is used, not CVS vendor branches, which are deprecated in Meta-CVS. Ordinary branches can shoot from anywhere, not just version 1.1 of every file, so third party ``grab branches'' representing multiple sources are possible. The grab feature can be used to reconstruct the restructuring history of old projects, provided that a sequence of snapshots is available. Then it's possible to apply standard version control tricks, like fix a bug in an old version, and merge it to the latest, despite renamed or moved files.

* Ease of deployment. The software doesn't require any repository-side installation; it uses the CVS client interface only. If you have write access to a remote CVS repository, you can install it on your client system and create a Meta-CVS module stored on the remote repository.

While it does not have all the features of the next generation version control systems under development, Meta-CVS seems to address many important problems people have regarding CVS. It may just succeed in making CVS "good enough" to serve the needs of many Free Software projects for a long time to come...


Meta-CVS experiences, posted 3 Nov 2002 at 00:46 UTC by johs » (Apprentice)

I've used it briefly, for some toys of mine. It seems to work very well. The only negative thing I can think of is that there is no Meta-CVS-mode for Emacs, and keyword substitution ($Id$, etc.) doesn't work. These are pretty minor details, though. Oh, and it's written in Common Lisp, so you know that the author has a sense of quality.

and yet..., posted 4 Nov 2002 at 18:24 UTC by mrsbrisby » (Journeyer)

still no atomic commits. this is by far the worst thing about CVS is that _many things_ can and do happen while doing a CVS commit. I just can't trust it.

i'm excited about subversion actually; having the repository (server) do more is important to me.

that being said, I still use CVS for downloading files anonymously, _AND_ for maintaining repositories on the local filesystem (group permissions, etc).

Keyword substitution., posted 5 Nov 2002 at 23:41 UTC by kazkylheku » (Apprentice)

It's not that keyword substitution doesn't work, but rather that those expansions which produce the name of the document actually produce the ``internal'' Meta-CVS name. That name is the prefix ``F-'' followed by a long string of hex digits. This behavior is not entirely a disadvantage. The expansion of $Id$ should help you trace an object back to the versioned elements from which it was produced; it should precisely identify the versioned element. The path name will not serve as such an I.D. when renaming is permitted. It's only because naked CVS does not support renaming that the path name of an element can serve as an I.D.

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

X
Share this page