Ejemplo 1 - Vemos la luz

Ahora que ya sabemos operar con las cosas mas comunes, vamos a ver como interactuamos con otros repositorios, sean o no nuestros.

El primer ejemplo va a ser obtener un repositorio existente, que esta publicado por web. Recordemos que darcs no depende de como se publiquen, podrian ser locales, remotos por web, etc. Si en lugar de hacer esto, hicieramos un "cp -a", o nos lo pasaran en un archivo comprimido seria igual de valido.
Vamos a usar un repositorio real, chico y con pocos cambios.

# darcs get http://auriga.wearlab.de/~alb/repos/libfilo
Copying patch 23 of 23... done!
Applying patches to the "working" directory...
..............................................
Finished getting.
#
Vemos que se bajo el repo
# ls -l
total 12
4 drwxr-xr-x  5 root root 4096 May 18 00:46 libfilo
# cd libfilo
# ls -l
total 44
drwxr-xr-x  7 root root  4096 May 18 00:50 _darcs
drwxr-xr-x  2 root root  4096 May 18 00:50 doc
-rw-r--r--  1 root root  1150 May 18 00:50 INSTALL
-rw-r--r--  1 root root 12706 May 18 00:50 libfilo.c
-rw-r--r--  1 root root  2084 May 18 00:50 libfilo.h
-rw-r--r--  1 root root  1077 May 18 00:50 Makefile
-rw-r--r--  1 root root  1159 May 18 00:50 README
drwxr-xr-x  2 root root  4096 May 18 00:50 tests
#
Revisamos los ultimos 5 cambios, de chusmas nomas
# darcs changes --last=5
Wed Apr 27 18:39:46 ART 2005  Alberto Bertogli <albertogli@telpin.com.ar>
  tagged 0.11

Wed Apr 27 18:10:46 ART 2005  Jose Aureliano Buendia <jaureliano@buendia.com>
  * Force the library to be compiled with LFS support.

Wed Apr 27 18:10:15 ART 2005  Remedios Moscote <remedios@moscote.com>
  * Update the README to add the new manpage.

Wed Apr 27 18:04:24 ART 2005  Alberto Bertogli <albertogli@telpin.com.ar>
  * Add an INSTALL document.

Wed Apr 27 18:04:09 ART 2005  Alberto Bertogli <albertogli@telpin.com.ar>
  * Add manpage support in the Makefile.
#
Notemos que el ultimo cambio es distinto, se llama "tag" y lo usamos para versionar el repositorio, poniendole marcas con nombres a medida que querramos, que refieren al estado del repositorio en ese momento. Se hacen con "darcs tag".

Un rato despues queremos actualizar nuestro repositorio, bajandonos cualquier cambio que este en el remoto que nosotros no tengamos.

Le pasamos como primer parametro el repositorio del cual
queremos ver los cambios, y si lo omitimos usa el ultimo que usamos.
# darcs pull
Pulling from "http://auriga.wearlab.de/~alb/repos/libfilo"...
No remote changes to pull in!
#
No habia nada que traer! Pero mas tarde, volvemos a probar
# darcs pull
Wed May 18 01:01:00 ART 2005  Amaranta Buendia <amaranta@buendia.com>
  * Sacar prints de debug innecesarios.
Shall I pull this patch? (1/1) [ynWvxqadjk], or ? for help: y
Finished pulling and applying.
#
Ahora trabajamos un poco nosotros en el repositorio, haciendo algunos records como ya vimos. Y despues de un rato, cuando estamos conformes, decidimos mandarle a un amigo nuestro los cambios, para que los mire y nos diga que le parecen.
Vamos a hacer dos alternativas: o dejar que darcs mande el mail directamente, o que nos genere un archivo que nosotros mandamos como attach con nuestro mailer.
El envio siempre se hace respecto de un repositorio remoto, y mandamos lo que esta en el nuestro que no este en el otro. En este caso enviamos contra el publicado.
Alternativa 1: darcs manda el mail
# darcs send http://users.auriga.wearlab.de/~alb/repos/libfilo
Wed May 18 01:01:00 ART 2005  Aureliano Buendia <aureliano@buendia.com>
  * Un cambio poco relevante.
Shall I send this patch? (1/1) [ynWvxqadjk], or ? for help: y

What is the target email address? Arcadio Buendia <arcadio@buendia.com>
Successfully sent patch bundle to Arcadio Buendia <arcadio@buendia.com>.
#
Aca, el mail se le envio a Arcadio con esos cambios
Alternativa 2: darcs nos deja un archivo para enviar adjunto
# darcs send -o /tmp/enviar http://users.auriga.wearlab.de/~alb/repos/libfilo
Wed May 18 01:01:00 ART 2005  Aureliano Buendia <aureliano@buendia.com>
  * Un cambio poco relevante.
Shall I send this patch? (1/1) [ynWvxqadjk], or ? for help: y
#
Aca nos dejo el archivo "/tmp/enviar" con los cambios
seleccionados
Ahora pensemos que a nosotros nos llega un mail con los cambios en un archivo adjunto, el cual grabamos en /tmp/para_aplicar y queremos aplicar a nuestro repositorio.
# darcs apply /tmp/para_aplicar
Finished applying...
#
Termino de aplicar, miramos el changelog de curiosos nomas
# darcs chan --last=2
Wed May 18 00:24:00 ART 2005  Apolinar Moscote <apolinar@moscote.com>
  * Reordenamos las funciones, porque si.

Wed May 18 01:01:00 ART 2005  Aureliano Buendia <aureliano@buendia.com>
  * Un cambio poco relevante.
#
No hay muchas mas operaciones básicas que estas, la gracia del asunto esta en como la combinacion de las mismas puede presentar situaciones delicadas, que vamos a ver un poco en el siguiente y ultimo ejemplo.