[darcs-users] Fwd: Darcs Problems

James Sleeman darcs at gogo.co.nz
Sun Feb 24 00:45:50 UTC 2013


Stephen J. Turnbull wrote:
> Suppose it could be done automagically (eg, every time you save), and
> the small "autocommits" hidden in the normal history report?  (Eg, the
>
An interesting idea.


> If you're doing that consistently, I suspect it's going to be
> difficult to "fix" Darcs (or any other VCS) to automatically do what
> you want well.
>
Yes I recognise that automation there is impossible, hence why I want a 
darcs supported way to do it manually...


>  > there is no way to say "hey Darcs, I want that, but not that,
>  > let me sort out any problems (conflicts) that causes"
>
> Sure there is.  diff | patch will work just as well as it always did.
> Of course, that doesn't help you the second time you want to do the
> same thing.
>
...very much like this but with Darcs knowing that my "new" patch made 
with the classical diff|patch and then recorded is equivalent in some 
regard to the existing patch in that other branch.

I indeed have resorted to using diff|patch, and wrote a script to help a 
bit with doing it.  But with darcs not knowing about the "equivalence", 
I wind up using more classical diff|patch than darcs push/pull :-(


> It sounds to me like your requirements are quite close to Mercurial's
> "queues" extension.
Queues would be one potential way to help, essentially always keeping 
your "local changes" as a queue of separate sort-of-patches on the top 
layer of the patches, nothing can depend on them that way.
I think this is the same way in which one would think that rebase would 
be helpful (and rebase may be a better solution, given an appropriate 
interface/tool to manage it), pulling your local patches always "to the 
top" before pushing/pulling the others.
I hope one day to see rebase in darcs officially, until then I can't 
experiment with that :-(


> (I'm looking for a specification the Darcs devs can follow, not suggesting
> you switch VCSes.)
>

To be clear, I'm still only using Darcs for 4 related websites which are 
not related (don't share code) to my hundreds of others.

My primary VCS is SVN where my hundreds of sites which share code are. 
And I handle my requirements by way of svnmerge.

Simplifying somewhat this is how it works in svn (been doing this way 
for 5-6 years);

/trunk
/siteX
/siteY
...

siteX begins as a copy of trunk.
I develop siteX
I use svn's merging (via svnmerge tool) to selectively merge or block 
the new changesets in siteX up into trunk.
svn remembers (by way of attributes) which changesets have been merged, 
and which are blocked
At some time in the future I update siteX by merging down the new 
changsets in trunk

Basically, svn has no concept of dependencies, so you can imagine this 
process is just like if darcs had an --ignore-dependencies switch to 
pull/push

The "cherrypicking" ability of darcs I thought would be a far better way 
of doing this, and give all the other darcs benefits (of which there are 
many).  But in reality, as described, the enforced requirement of darcs 
to take all dependencies, makes it practically impossible from within 
the darcs ecosystem (in my experience).


> In the context of Darcs, it might be useful to have a semi-automatic
> UI that would display the primitive patches that create dependencies,
> and allow you to split the containing patch.  I'm not sure how useful
> this would be for you given you prefer larger patches.
If darcs could even simply say why the (implicit) dependancy exists... I 
think that would be a useful feature (one could always unrecord and then 
record separate patches based on that information).  A semi automated 
means to split that depended upon patch so those "reasons" were collated 
into their own patch, even more so.


---
James Sleeman



More information about the darcs-users mailing list