Davids Advanced Revision Control System


Darcs is a DistributedVersionControl system, like GnuArch, MonoTone and CodeVille. Each copy of your source is a fully functional branch.

Darcs is written in HaskellLanguage.

The underlying "theory of patches" allows patches to commute, i.e. to be applied in different orders to different repositories and still end up with the same result. If two patches cannot be commuted, with the same result, then the latter depends on the prior physically (dependencies can also be explicitly declared by the user).

Inherently, Darcs's interface is oriented towards flexible CherryPicking influenced propagation of changes. Every record operation (commit) can include any combination of the different 'hunks' that changed in the files (uncommitted changes in a file do not necessarily relate to each other), and every push/pull patchset includes only what you want.

The following workflow is sometimes quite complicated in other VCSs, but is very trivial and natural in Darcs:

Darcs is easier to use than just about any other VCS, particularly for small projects.

It also makes use of external tools extensively - it has no network protocol or fancy GUI features. Instead, ssh, email, HTTP, and FTP, or simply plain old files, can be used to move patch sets (although to push a patch you need Darcs available on the remote side). External tools are used to resolve conflicts (either by marking the conflicts in the working copy, like CVS does, or by use of an ancestor/children 3-way merge tool). GPG can be used to apply patches automatically if they're signed by a trusted key. Automatic testing on record is a plain shell command to be run in the repository.

There might be problems with Darcs being written in GHC. There are many platforms that GHC is not available on.

18 platforms are currently listed on http://haskell.org/ghc/, and no common one is missing. One needs a special talent to get a Haskell program to segfault.

GHC is a considerably large and complex compiler.

It is worth noting that HackageDb?, Haskell's own big package management system, is now based on Mercurial.

What does that mean, exactly? I'm confused by that response. -- JasonEspinosa


EditText of this page (last edited July 23, 2010) or FindPage with title or text search