Darcs
From Wikipedia, the free encyclopedia
Developed by | David Roundy |
---|---|
Latest release | 2.2.0 / 2009-01-16 |
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
- ^ Commit in which David changes the acronym's meaning
- ^ "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.
- Roundy, David (2005). "Darcs: distributed version management in Haskell". Proceedings of the 2005 ACM SIGPLAN workshop on Haskell Tallinn, Estonia: 1 - 4. ISBN 1-59593-071-X; doi:10.1145/1088348.1088349.
[edit] External links
Wikibooks has a book on the topic of |
- Darcs homepage
- Darcs manual
- Darcs wiki
- David Roundy's talk at FOSDEM 2006 about darcs' formalism at the Internet Archive - (PDF)
- Interview with darcs' creator on its origins and ideas
- darcsweb Tool to serve darcs repositories via [HTTP]
- An Algebra of Patches, Ian Lynagh, October 30, 2006