I've been meaning to switch away from CVS for a few years now, but I was never sure what I wanted to switch to, so I kept delaying it. I finally decided yesterday that Mercurial is pretty nice. The Mercurial repository is available from http://hg.dovecot.org/ (has a nice web interface). I wrote a small Mercurial mini-howto below. I'm not a Mercurial expert yet, so if you know better ways to do some things please let me know. The CVS repositories will still exist for a while, but they won't be updated anymore. If you notice the CVS being referenced somewhere (wiki, docs, etc.) please let me know (or fix yourself in wiki). 1. Fetch the initial repository: - ex. CVS HEAD: hg clone http://hg.dovecot.org/dovecot/ - ex. branch_1_0: hg clone http://hg.dovecot.org/dovecot-1.0/ - sieve plugin: hg clone http://hg.dovecot.org/dovecot-sieve-1.0/ The Sieve plugin currently works only with v1.0. I'll make a new "dovecot-sieve" repository for CVS HEAD later. 2. Update the repository: hg pull hg merge # only needed if you had done any changes hg update # to actually see the pulled changes All of this can be done with fetch extension. You can enable it by adding to ~/.hgrc: [extensions] hgext.fetch = After that you can use "hg fetch" which does all the above 3 commands (as far as I know, haven't really tried yet). 3. If you want to modify the sources, add your name to ~/.hgrc so it goes nicely into changelogs: [ui] username = Timo Sirainen <tss@iki.fi> You're able to "hg commit" your own changes into your repository. If you want to publish them, use "hg log" to see the changeset ID, and then use "hg export changesetid" to get patch ("hg export tip" might work too if you just want the last change(?)). You can then email the patch to Dovecot mailing list to get it merged. With CVS the ChangeLog file was updated every 15 minutes. Now the ChangeLog file doesn't exist in the repository at all. Instead it's generated with "hg log --style=changelog" when running "make dist".