Mercurial es un sistema de control de versiones distribuido o descentralizado. Esta diseñado para ser eficiente, por ejemplo lo usa el proyecto Xen en su repositorio de código OpenSolaris como scm preferido.
Uno de los problemas que tiene, y experimente, con subversion es la dependencia con el repositorio central para la mayoría de las operaciones. En cambio, con mercurial (hg) pueden existir infinitos repositorios.
Cuando uno hace la operación clone, que sería como un checkout, se obtiene el repositorio completo con toda historia. A partir de ahí podemos hacer todas las demás operaciones (revert, commit, add, remove, etc) en el repositorio local, y cuando queramos actualizar o enviar nuestros cambios simplemente un pull o push respectivamente.
Puede trabajar mediante ssh o http, que a diferencia de subversión donde se tiene problemas con proxys por el soporte webdav, funciona como cgi (o standalone) pudiendo hacer los push/pull directamente.
Esta a disposición el libro no oficial de mercurial: Distributed Revision Control with Mercurial [pdf]
Ah!, esta hecho en python, y las partes críticas en c. Las malas lenguas dicen que es más rápido que darcs, pero tambien leí que las últimas versiones de darcs mejoraron bastante el rendimiento.
Comentarios
Darcs trata de automatizar la unión de ramas (merging): este calcula como debe cambiar el programa cuando dos parches deben conmutar (ser aplicados en diferente orden). Eso hace que push y pull sean muy fáciles. El problema es este algoritmo es de complejidad exponencial cuando lidia con conflictos. En estos casos darcs se puede poner muy aburrido de usar.
Si es que es cierto que Mercurial es más rápido, especialmente si hablamos de un lenguaje interpretado (viborita), la diferencia seguro se debe a que este usa algoritmos diferentes para el tratamiento de parches. Tengo curiosidad en cúan fácil es unir ramas y lidiar con conflictos en Mercurial, por ahí lo pruebo.