Darcs: otra forma de trabajar

Si tengo que ser sincero, desde un principio he sido bastante reacio a la moda esta de los sistemas de control de versiones. Estaba tan agusto y acomodado con mis copias de seguridad y mis carpetas fechadas que me daba una pereza enorme ponerme a aprender un nuevo sistema que, sin duda, me obligaría a cambiar la forma de trabajar.

La verdad, uno no sabe lo que se está perdiendo hasta que lo prueba y aprende. Primero y muy vagamente CVS, luego Subversion y posteriormente el gran salto de calidad pasando a los sistemas de control de versiones distribuidos. Me he quedado con el más versátil dada mi forma de trabajar: Mercurial.

Pero si algo he aprendido desde esa acomodada posición inicial es a no cerrar posibilidades, así que gracias a un proyecto en el que estoy trabajando, he tenido la oportunidad de probar Darcs, eso si, a otro nivel.

Y digo "a otro nivel" puesto que la forma de trabajar es más parecida a un proyecto open source en el que hay un core team que verifica y valida el trabajo del resto de la comunidad, pasando el código un control de calidad previo y una fantástica capa de testeo antes de su puesta en producción. El flujo sería el siguiente:

  • Pull de las últimas novedades del proyecto
  • Se trabaja en las nueva características
  • Se "graban" los cambios periódicamente
  • Cuando varias de esas grabaciones completan una característica se crea un parche con todas esas grabaciones y se envía al maintainer.
  • El maintainer verifica la validez - o no - del código y tiene la capacidad para hacer push.
  • Dado el caso, se dispara un despliegue a preproducción o a producción directamente.
$ darcs pull
$ darcs whatsnew -l # muestra status
$ darcs record # hacer commit
$ darcs send -O # crear patch
$ darcs amend
$ darcs push
$ darcs apply parche.patch
$ darcs unpull

Como véis las órdenes son idénticas a cualquier otro sistema de control de versiones, de hecho podríamos trabajar de forma idéntica a como lo hacemos habitualmente con Mercurial o Git, (pull, commit, push, etc...) sin embargo está resultando una experiencia muy enriquecedora el tener otro flujo distinto al habitual.

En concreto hay una característica que me encanta de Darcs, y es el poder commitear partes de un archivo y no el archivo completo. Por ejemplo si hacemos dos cambios distintos en el mismo fichero, uno de ellos corrigiendo un bug y otro porque vamos a empezar una nueva feature, podemos hacer record (commit) del cambio que nos interese, no tiene por qué reflejarse el archivo por completo. Algo que en mercurial por ejemplo no se puede hacer a no ser que se active la extensión record.

Reconozco que todavía me falta entrar en detalle con Git, pero al final todos los sistemas de control de versiones que he probado han acabado por gustarme de una u otra forma. Así que la moraleja sería sencilla, no comentas el mismo error que en un principio he cometido yo, prueba los que puedas y quédate con el que más te guste, pero si desarrollas, dcvs es un musthave.

code

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.