Darcs

From Wikipedia, the free encyclopedia

Jump to: navigation, search
Darcs
darcs logo
Developed by David Roundy
Latest release 2.2.0 / 2009-01-16; 77 days ago
Operating system Unix, Linux, BSD, Mac OS X, Windows
Type revision control
License GPL
Website http://darcs.net/

Darcs is a distributed revision control system by David Roundy that was designed to replace traditional centralized source control systems such as CVS and Subversion. Two particular features in its design distinguish it from CVS. Each copy of the source tree acts as a full repository, allowing several different versions to be maintained in different locations. Patches are global to the repository and are subject under certain conditions to reordering, as governed by the project's "theory of patches".

The name is a recursive acronym for Darcs Advanced Revision Control System[1], but is usually written lowercase (darcs), except at the beginning of sentences.

In basic usage, users get a copy of a repository, make any changes, record the changes, pull changes from other repositories, and finally push or send changes to other repositories. To start a new repository, users can init any directory.

Other repositories can be local directories, or accessed by SSH or HTTP protocols. Changes can be submitted by email in situations where the user lacks permission to write to another repository.

Darcs is written in the functional programming language Haskell; among other tools, it uses QuickCheck[2].

Most of darcs' commands are interactive, allowing e.g. users to commit changes or pull specific files selectively. This feature is designed to encourage more specificity in patches. As a result of this interactivity, darcs has fewer distinct commands than many comparable revision control systems.

Contents

[edit] Shortcomings

Darcs has been criticized on the grounds of performance (see e.g. [1]). The worst of these issues was the Darcs 1.x merge algorithm that, in the worst case, could do exponential work to merge some conflicts. Although the issue was not completely corrected in Darcs 2 (it is still possible to experience an exponential merge with recursive conflicts, explained here), exponential merges have been minimized.

[edit] History

Darcs evolved out of David Roundy's efforts to design a new patch format for GNU arch in June 2002. These discussions didn't lead to any code being committed to arch, but did lead to his theory of patches. After writing an initial version of darcs in C++, the Haskell version was written in Autumn 2002 and released to the public in April 2003.

[edit] See also

[edit] References

  1. ^ Commit in which David changes the acronym's meaning
  2. ^ "One of the problems I had with the initial C++ darcs was that I had no unit testing code. Within two weeks of the first darcs record, I started using QuickCheck to test the patch functions, and the same day I fixed a bug that was discovered by QuickCheck. QuickCheck makes it very easy to define properties that functions must have, which are then tested with randomly generated data." From page 2 of David Roundy 2005.

[edit] External links

Personal tools