[darcs-users] multiple heads

Stephen J. Turnbull stephen at xemacs.org
Mon Mar 31 08:28:33 UTC 2008


Declan Naughton writes:

 > Would it not be useful to provide for multiple heads (another type of
 > branch I guess) within a darcs repo?

It's not clear what this means in darcs.  In DAG-based VCSes like git,
Mercurial, and Bazaar, you can always totally order the revisions.
This implies restrictions on manipulations that Darcs does not
impose.  For example:

cd /tmp/wd
darcs initialize
echo "1" > A
darcs record -m "A 1.0"
echo "2" > B
darcs record -m "B 1.0"
echo "3" >> A
darcs record -m "A 2.0"
echo "4" >> B
darcs record -m "B 2.0"
cd ..; mkdir odd; cd odd
darcs initialize
darcs pull --patches="^A"

This actually makes sense in Darcs!  And will DTRT, since the patches
commute.  So in some sense we can say Darcs can find two or more heads
in there, even though nothing is labeled as a head!

git and Mercurial would be able to handle this (with cherrypick and
transplant, respectively), but it's not natural.  DAG-oriented VCSes
would see this as a linearly ordered set of commits with one head.

 > As far as I understand, it is necessary to create a new repository to
 > undo a couple of patches? (or does unrecord work many times? does it
 > cease to work at tags?)

No, yes, and no.  

 > Using unrecord is also unideal since you are losing data... Which many
 > RCS users will NOT LIKE. I think it would be a great thing if we could
 > rid unrecord from darcs.

I agree, but most Darcs users won't.  In any case, if you don't like
it, just don't use it.  You can also use "darcs rollback && darcs
revert" which is safe.



More information about the darcs-users mailing list