[darcs-users] Down the exponential road

Tommy Pettersson ptp at lysator.liu.se
Thu Aug 17 09:42:14 UTC 2006


On Wed, Aug 16, 2006 at 11:22:45AM +0200, Niklas Frykholm wrote:
> I have hit exponential time in "darcs pull". It has been running
> for 8 hours now, with no sign of stopping. This has happened to
> me before, but in the past I have always been able to resolve
> the issue with unrecord and hand-merging.

It's hard to know how to (if possible) "work around" this. The
thing taking time is darcs commuting patches, especially such
that forms (and sometimes unforms, I think) mergers. This is the
root of the problem, and the only way to make it go away is to
remove them (e.g., with unrecord). But they could also be
"covered", preferably with a tag. When the tag is in both repos
(and the repos are optimized with --reorder to bring out all out
of order patches), the pre-tag parts of the two repos won't be
looked at by darcs any more when pulling and pushing, so the
conflict mess will thus be buried. To get to this state, all the
conflicting patches must somehow first be brought together
though...

I think the order in which patches enters the guts of darcs can
have an impact on the amount of cpu time. I've also seen that
sometimes pulling conflicting patches in small bunches is faster
than pulling all patches at once. You could try to optimize both
repos with --reorder before the pull, but then there is also
risk for hitting a real bug in darcs where it can no longer
commute the patches into place to perform the pull, so try it
with copies first.

> It seems that whenever we run into this kind of behavior, it is
> our .vcproj files that cause the problem. We have lots of
> different configurations, they tend to change frequently and
> they are partly auto-generated. When we get conflicts it is
> almost always in these files.

If the different repos "fight" each other, trying to preserve
their local variety of the .vcproj file, this is more or less
guaranteed to result in exponential conflicts.

You could perhaps try to always record these changes in separate
patches, and whenever possible, use amend-record, or do an
unrecord - record before pulling/pushing them. But unless the
.vcproj files converge at points (which can be tagged), this
will only lead to slower buildup of the exponential mess.


-- 
Tommy Pettersson <ptp at lysator.liu.se>




More information about the darcs-users mailing list