On 31/03/10 17:20, Stephen J. Turnbull wrote:
Simon Marlow writes:

  >  I didn't write that page, but just wanted to point out that it's a wiki
  >  - please feel free to edit the page to be more accurate/honest as
  >  appropriate.

I'd need to know a lot more about the goals of the GHC workflow to
improve accuracy, though.

That page isn't about GHC in particular, it's a general darcs-to-git conversion tutorial.

  >  In response to your last point though, I'd counter that darcs supports
  >  the cherry-picking workflow that we use in GHC, whereas none of the
  >  other VCs do (or at least, they don't support it well).

I'd be interested to hear an explanation of the motivation of the
workflow.

It's pretty simple: you have two branches. One, the "head" is where you do all your development, and another, "stable" is one from which you are currently doing releases. Bug fixes are cherry-picked from head into stable regularly. From time to time you fork head to make a new stable branch, and stop making releases from the old stable.

It's a very common development model, and the VCS should really support it.

All of the major VCSes claim to support cherry-picking, and
by their designers' lights I see no reason to think they don't do it
well.  I can easily imagine that many who like git would dislike Darcs
and vice-versa, and that it would depend a lot on what you mean by
"support well".

Right, well we all know how well darcs supports this model: very well (though not perfectly: sometimes I'd like to be able to cherry-pick patches without dependencies, but that's a separate discussion). It's the default way of working in darcs; I don't have to use any special commands, I just push and pull patches to achieve this workflow.

In the other VCSs, the cherry-picking commands amount to extracting a diff of the cherry-picked patch and applying it to the branch, with the same log message. What you get is a different patch - the information that you cherry-picked the original patch has been discarded. I believe git is clever enough to avoid conflicts if you later re-merge the branch, or cherry pick other patches, but I think the algorithms are based on heuristics (i.e. a super-clever do-what-I-wanted merge) rather than precise patch commutation as in darcs, so the algorihtms will fail when things get complex. I've seen cases where git's attempts to automatically figure out when a file was renamed go wrong, and it's highly confusing.

Also, there's no automatic derivation of patch dependencies, so if you want to cherry-pick a patch with dependencies you have to figure out the dependencies manually.

Cheers,
        Simon
_______________________________________________
darcs-users mailing list
[email protected]
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to