Darcs
Original author(s) | David Roundy |
---|---|
Developer(s) | Guillaume Hoffmann, et al. |
Initial release | March 3, 2003[1] |
Stable release | 2.16.5[2]
/ 20 February 2022 |
Repository | |
Written in | |
Type | Version control |
License | GPL-2.0-or-later |
Website | darcs |
Darcs is a
Model
Darcs treats patches as first-class citizens. For the user, a repository can be seen as a set of patches, where each patch is not necessarily ordered with respect to other patches, i.e. the set of patches is only a partially ordered set. In many cases patches can be independently transmitted between various repositories.
Many branching,
The patches of a repository are linearly ordered. Darcs automatically calculates whether patches can be reordered (an operation called commutation), and how to do it. These calculations implement a so-called "patch theory".
A Darcs patch can contain changes of the following kinds:
- line changes,
- file and directory creation and deletion,
- file and directory moving,
- word substitution (typically used in code refactoring, for instance rename all occurrences of "foo" to "bar" in a given file).
The notion of dependency between patches is defined syntactically. Intuitively, a patch B depends on another patch A if A provides the content that B modifies. This means that patches that modify different parts of the code are considered, by default, independent. To address cases when this is not desirable, Darcs enables the user to specify explicit dependencies between patches.
Since version 2.10, Darcs uses patience diff[citation needed] by default.
History
Darcs evolved out of David Roundy's efforts to design a new patch format for
Shortcomings
Darcs has been criticized for its performance issues.[6][7] This includes challenges related to the merge algorithms of Darcs 1.x, which showed exponential work to merge certain conflicts. Although not resolved completely in the subsequent versions of Darcs,[8] the frequency of exponential merges did show noticeable reductions.
Bugs still remain in which merging of recursive conflicts fails.[9]
The revision control system Pijul[10] solves those complexity problems by making conflicts and their resolutions first class citizens which can commute with other changes.
See also
- Comparison of version control software
References
- ^ "Changelog for darcs". Hackage. Retrieved 2018-06-24.
- ^ Error: Unable to display the reference properly. See the documentation for details.
- ^ Roundy 2005, p. 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.’
- ^ Roundy, David (2008-10-21), "prefer recursive acronymn (sic) to embarrassing one", Darcs (Commit), Darcs Hub.
- ^ "Two", Darcs
- ^ Marlow, Simon (March 7, 2007), "Current status of Darcs", Darcs users (mailing list), OSUOSL.
- ^ Fendt, Robert (January 9, 2009), "DVCS Round-Up: One System to Rule Them All?", Developer Network, vol. 1, Linux Foundation, archived from the original on 2009-02-28.
- ^ "ConflictsFAQ", Wiki, Darcs.
- ^ "Issue 1520 Irrefutable pattern failed for pattern Data.Maybe.Just a2", Bug Tracker, Darcs.
- ^ Pijul web site
- Roundy, David (2005), "Darcs: distributed version management in Haskell", Proceedings of the 2005 ACM SIGPLAN workshop on Haskell, Tallinn, Estonia, pp. 1–4, S2CID 13932981