[darcs-users] use case showing DARCS's unique features?
David Roundy
droundy at jdj5.mit.edu
Thu Jun 26 12:37:49 UTC 2003
On Tue, Jun 24, 2003 at 06:30:14PM -0400, Zooko wrote:
>
> I'm looking for a new revision control system to replace CVS. I've put up a
> web page detailing what I've learned so far:
>
> http://zooko.com/revision_control_quick_ref.html
Looks pretty accurate (at least as far as darcs goes, I can't vouch for the
others).
You mention that the manual says it's "a little slow on large projects",
and alas that is still true. However, since I wrote that I have speed
darcs up by perhaps a factor of ten, so progress is being made, and I am
hopeful. Actually, I think there may have been a speed regression
recently, at least for the linux kernel, which is my test case of a large
project. Lazy languages sure can make it tough to track down efficiency
problems.
> I've read the manual. I really like the basic theory of patches (patches
> are invertible, they are dependent iff they don't commute, and "parallel"
> patches can always be merged). Actually I'm not sure I like that third
> part.
Well, the third is necesary in order to have a repo be completely defined
by its set of patches... well you could do without it, but then some
branches would be unmergeable, which doesn't sound any good...
> Anyway, although I like the mathemtical abstraction of the basic theory
> of patches, I don't understand how such an abstraction would actually be
> used in a tool, and I definitely don't understand what DARCS can actually
> do in practice that arch or Meta-CVS cannot.
>
> Could someone please show me the simplest text file and the simplest
> branch and merge that I might actually want to do in practice, and that
> DARCS facilitate where arch or Meta-CVS would complicate?
I don't know anything about Meta-CVS, but arch I do know about. Imagine
the following scenario:
Patch A: add file foo to repo
B: modify file foo
C: modify file bar (already existing before this scenario starts)
Now in a separate repo (lacking both A and B) if I want to pull patch B,
darcs will not allow this unless you also agree to pull patch A. patch C,
however, can be pulled without pulling either A or B. This is just a
consequence of the commutation properties in darcs.
In arch, however, you could pull either patch B or C without pulling A. If
you pull B (without A) you'll get some sort of a weird conflict result (I'm
not sure what, but you could experiment and see--probably you'd get at best
a hard to understand .rej file created by patch(1)). This is because arch
has no way of knowing that B depends on A.
There are, of course, other differences as well, but this is the first that
comes to mind (and probably one of the likelier ones in practice). I guess
it would be better to have an example with a real merge in it, but that
takes more thought.
--
David Roundy
http://www.abridgegame.org
More information about the darcs-users
mailing list