[darcs-users] Can I express extra dependencies between patches?

Junio C Hamano junkio at cox.net
Sat Mar 19 10:19:33 UTC 2005

Is there a way to specify dependencies between patches, in
addition to what darcs automatically determines based on the
lines they touch?

Cherry-picking in darcs is very easy and it is one of the things
that makes darcs very attractive to me.  However, sometimes it
is *too* easy and burns me.  Here is a situation:

 * I am maintaining two applications, "foo" and "bar".  Their
   sources are in foo.c, and bar.c; they both use common
   services from libfoobar.c.

 * I needed to add a new feature X to "foo".  For this, I needed
   to add a new function "feature_x_support()" to libfoobar.c,
   and call it from foo.c.

 * Later, feature_x_support() turns out to be useful to
   implement feature Y in "bar".  I add call to the function to

 * My modification to foo.c to implement the feature X in foo is
   complex and not complete.  The changes to bar.c is easy.  My
   customer wants a new release with feature Y but can live
   without feature X for now.

The following would be the way I would work:

 * Use darcs to version control foo.c, bar.c, and libfoobar.c,
   as everybody else on this list does ;-).  Set up main
   repository "stable" and work-in-progress "wip".

 * In "wip", hack away and add feature_x_support() to
   libfoobar.c.  Test to make sure it does not break anything,
   and then record the changes as "add feature_x_support".

 * In "wip", add calls to feature_x_support() to foo.c and keep
   working.  Implementation of feature X would take more time
   and is not complete at this moment.  Not to lose my local
   changes, I might record the changes so far under some name, with
   the understanding that I might amend it later and I would not
   pull it from "stable" in the current form.

 * In "wip", add calls to feature_x_support() to bar.c.  Test to
   make sure it does not break anything, it implements feature Y
   properly, and then record the changes as "implement feature

 * In "stable", pull "add feature_x_support" and "implement
   feature Y" from "wip".  Test away and ship the result.

In the final step, darcs allows me to pull "implement feature Y"
without pulling "add feature_x_support", since they do not
textually depend on each other.  It would be nice if I can
somehow express the fact that the "implement feature Y" patch
depends on "add feature_x_support" patch when I record it.

More information about the darcs-users mailing list