Hacker News new | ask | show | jobs
by woadwarrior01 493 days ago
Yeah, there was a lot of FUD being spread around Darc's exponential merge corner-case. We were using it with a medium sized codebase (~50k lines) and never encountered that issue. Anyway, we begrudgingly moved to mercurial a few years later and then onto git, further along the road. With every step, the tooling got worse.
4 comments

I was on a small team using Darcs around 2005-2008, and I was a big fan of it, evangelizing as much as I could.

However, we were constantly hitting the exponential merge conflict bug. Darcs messed up our repo state several times and cost us days of productivity. It had nothing do with the size of the codebase; as far as I remember, all that was needed to trigger the bug was to make a patch that happened to include the same code line change as someone else. It felt ridiculously fragile. As far as I remember, once you hit the bug, your repo was beyond saving. You had to roll back to a backup.

We still stuck by Darcs until around 2009-2010 when it was pretty obvious the writing was on the wall and Git was going to eat the world, in large part thanks to GitHub.

It got to the point where I had a darcs commit take more than ten minutes. That's when I stopped using darcs.
At a certain point darcs was fixed to make the exponential merge case much more rare, though it has never been entirely removed. At least from that point on, it has always been possible to use darcs productively just by avoiding or working around those very conflict-heavy merge scenarios. Regular darcs users internalise those working habits and so rarely encounter the problem in practice.

If you do encounter a slow merge with darcs, the normal practice is to treat that as a mistake, step back and re-do your commits to be less conflicting - not to waste time waiting, ending up with a very slow merge in your history.

The original exponential merge corner case, and subsequent lack of a clear prevention mechanism or even clear description of the issue, has had a big anti-marketing impact, and has probably kept darcs out of the limelight ever since the departure of the original lead developer, despite a small heroic band of maintainers working on it to this day.

We were using Darcs on what was then still a small code base and already started running into operations sometimes taking tens of minutes. Not knowing if an operation would end sometime during our lifetime is pretty annoying. Git, though conceptually worse, felt like a breath of fresh air once we migrated.