[Haskell-cafe] announcing the darcs 2.0.0 release

David Roundy droundy at darcs.net
Mon Apr 7 13:22:25 EDT 2008

Hello darcs users,

I am pleased to announce the release of darcs 2.0.0! It's been a long time
coming, and hopefully you will be pleased with the result.  Notable new
features include (in no particular order):

 * New ssh-connnection mode that dramatically improves connection times
   when darcs 2.0.0 is present on the server as well as the client.

 * New "hashed" format that improves darcs' robustness with regard to
   network or filesystem errors, and also allows for efficient (and safe)
   caching of patch data, greatly improving access times to a repository
   that you have had previous contact with--which is the common case of
   pulling, pushing or sending.  This format allows patches to move back
   and forth with darcs1-format repositories, and is the recommended format
   (with an old-format mirror) if you do not wish to require darcs 2.0.0,
   but want to benefit from most of its improvements.

 * New "darcs-2" format, which features improved conflict handling, and
   also has all the benefits of the hashed format.  Because this format
   features new and different semantics, it is not possible to interact
   with darcs 1.x, and care must be taken in switching to this format.  It
   is the recommended format for new projects (although we haven't made it
   the default).

 * The --partial get is now replaced with a --lazy get when using hashed
   formats, and in fact if you forget to provide one of these flags on the
   command line, you can acheive a lazy get simply by hitting control-C
   after darcs prints a message suggesting you do this.  Lazy repositories
   are identical to full repositories so long as you have a working network
   connection and the original repository is accessible, with patches
   downloaded as they are needed.  When the original repository is no
   longer accessible, a lazy repository will behave like the old --partial

 * We have added support for pipelined http downloading via either libwww or
   a very recent version of libcurl.  Neither of these is yet the default,
   but it is recommended that you try one of them if possible, as they
   greatly improve download times.

 * There is now a configurable global cache, which can help reduce network
   traffic if you have multiple local copies of the same--or
   similar--remote repositories.

 * I'm sure there are other new features, but this is all that comes to
   mind at the moment.


There are numerous issues with the --darcs-2 repository semantics (see a
discussion at http://wiki.darcs.net/DarcsWiki/DarcsTwo).  In general, I
believe the status is that anything you could do with darcs 1.x you can do
with the darcs-2 semantics, but the high-level code hasn't been updated to
take into account the new possibilities opened up by the new semantics.  In
particular, patch dependencies are much more complex.  Alas, there has not
been enough time (or sufficient contributors) to make the code take these
complexities into account, and if you're clever you can reveal bugs.  You
have been warned.

Darcs 2.0.0 contains some performance regressions when running with large
repositories.  It is possible that these regressions will be sufficient to
prevent its effective use in some projects.  If this describes your
project--and the only way to know is to try it--then I recommend
considering either switching to a different revision control system, or
helping us to improve darcs.  The former is certainly the easier path.  If
I knew how to easily make darcs dramatically faster, I would have done so.


The existing model for darcs maintenance has been the use of two branches,
a darcs-stable branch for well-tested changes, and a darcs-unstable branch
for more experimental work.  Each branch has a separate maintainer, so most
patches will be reviewed by two maintainers before making it into a darcs
release.  This is quite a nice system.

Unfortunately, it is also a rather labor-intensive process, and due to a
lack of contributors, we've moving to a more streamlined process.  Starting
with the darcs 2.0.0 release, there will be just one central branch of
darcs and only one maintainer: for now this is me, David Roundy.  Moreover,
I will be attempting to act as a much lower-profile maintainer than we've
had previously.  I will not be reading bug reports, reading the darcs-users
email list or even the darcs-devel mailing list.  I will only be reviewing
patches that are contributed.  I will not write up long user-friendly
release announcements like this for future darcs releases.  I will only be
reviewing and applying contributed patches.

What does this mean?

It means that if darcs is to continue to improve, we need new
contributors.  If bug reports are to be read, responded to and bugs are to
be fixed, we need new contributors.  If darcs is to be made more efficient,
we need new contributors.

The new URL for the darcs repository is simply http://darcs.net.

(Yes, this is a lame ending to the email, but I'm sending it anyhow,
because I'm tired, and I've got to get this done.)

More information about the Haskell-Cafe mailing list