Node:Averiguar quién hizo qué (leyendo informes de cambios), Next:, Previous:Detección y resolución de conflictos, Up:Un día con CVS



Averiguar quién hizo qué (leyendo informes de cambios)

A estas alturas, el proyecto ha pasado ya por varios cambios. Si está intentado hacerse una idea de lo sucedido hasta el momento, no querrá necesariamente examinar con detalle cada fichero de diferencias. Examinar los informes de cambios sería lo ideal, y puede hacerlo con el comando log:

floss$ cvs log
(páginas y páginas de salida omitidas)

La salida del comando tiende a ser bastante detallada. Veamos los informes de cambios para un único fichero:

floss$ cvs log hello.c
RCS file: /usr/local/cvs/miproyecto/hello.c,v
Working file: hello.c
head: 1.4
branch:
locks: strict
access list:
symbolic names:
        start: 1.1.1.1
        jluis: 1.1.1
keyword substitution: kv
total revisions: 5;     selected revisions: 5
description:
--------------
revision 1.4
date: 1999/04/20 04:14:37;  author: jluis;  state: Exp;  lines: +1 -1
alterada la línea del medio
--------------
revision 1.3
date: 1999/04/20 02:30:05;  author: mperez;  state: Exp;  lines: +1 -0
añadida una nueva línea entremedias
--------------
revision 1.2
date: 1999/04/19 06:35:15;  author: jluis;  state: Exp;  lines: +1 -0
ahora también dice adiós
--------------
revision 1.1
date: 1999/04/18 18:18:22;  author: jluis;  state: Exp;
branches:  1.1.1;
Revisión inicial
--------------
revision 1.1.1.1
date: 1999/04/18 18:18:22;  author: jluis;  state: Exp;  lines: +0 -0
Importación inicial en CVS
=========================================================================
floss$

Como es habitual, hay mucha información al comienzo que puede simplemente ignorar. La parte que nos interesa viene después de cada línea de guiones, en un formato que se explica por sí solo.

Cuando se envían muchos ficheros a la vez al repositorio, todos tienen un mismo informe de cambios, algo que puede ser útil para seguir los cambios. Por ejemplo, ¿recuerda cuando enviamos fish.c y random.c a la vez? Se hizo de esta forma:

floss$ cvs commit -m "añadido código C"
Checking in a-subdir/subsubdir/fish.c;
/usr/local/cvs/miproyecto/a-subdir/subsubdir/fish.c,v  <-  fish.c
new revision: 1.2; previous revision: 1.1
done
Checking in b-subdir/random.c;
/usr/local/cvs/miproyecto/b-subdir/random.c,v  <-  random.c
new revision: 1.2; previous revision: 1.1
done
floss$

El resultado de esta operación fue el envío de ambos ficheros con un mismo informe de cambios: "añadido código C". Se da el caso de que ambos ficheros empezaban en la revisión 1.1 y pasaron a la 1.2, pero esto es sólo una coincidencia; si random.c estuviera en la revisión 1.29, habría pasado a la 1.30 tras concluir este envío, y la revisión 1.30 tendría el mismo informe de cambios que la revisión 1.2 de fish.c.

Al utilizar cvs log con estos ficheros, verá el informe que ambos comparten:

floss$ cvs log a-subdir/subsubdir/fish.c b-subdir/random.c

RCS file: /usr/local/cvs/miproyecto/a-subdir/subsubdir/fish.c,v
Working file: a-subdir/subsubdir/fish.c
head: 1.2
branch:
locks: strict
access list:
symbolic names:
        start: 1.1.1.1
        jluis: 1.1.1
keyword substitution: kv
total revisions: 3;     selected revisions: 3
description:
--------------
revision 1.2
date: 1999/04/19 06:35:27;  author: jluis;  state: Exp;  lines: +8 -1
añadido código C
--------------
revision 1.1
date: 1999/04/18 18:18:22;  author: jluis;  state: Exp;
branches:  1.1.1;
Revisión inicial
--------------
revision 1.1.1.1
date: 1999/04/18 18:18:22;  author: jluis;  state: Exp;  lines: +0 -0
Importación inicial en CVS
=========================================================================
RCS file: /usr/local/cvs/miproyecto/b-subdir/random.c,v
Working file: b-subdir/random.c
head: 1.2
branch:
locks: strict
access list:
symbolic names:
        start: 1.1.1.1
        jluis: 1.1.1
keyword substitution: kv
total revisions: 3;     selected revisions: 3
description:
--------------
revision 1.2
date: 1999/04/19 06:35:27;  author: jluis;  state: Exp;  lines: +8 -1
añadido código C
--------------
revision 1.1
date: 1999/04/18 18:18:22;  author: jluis;  state: Exp;
branches:  1.1.1;
Revisión inicial
--------------
revision 1.1.1.1
date: 1999/04/18 18:18:22;  author: jluis;  state: Exp;  lines: +0 -0
Importación inicial en CVS
=========================================================================
floss$

Por esta información sabrá que las dos revisiones fueron parte del mismo envío (el hecho de que las fechas de las dos revisiones sean las mismas, o muy próximas entre sí, es una prueba más).

Examinar los informes de cambios es una buena forma de hacerse rápidamente una idea de lo que ha estado sucediendo en un proyecto o de saber lo que pasó con un fichero específico en un momento determinado. Existen también muchas herramientas libres diseñadas para convertir la salida bruta de cvs log a formatos más concisos y legibles (por ejemplo, al estilo ChangeLog de GNU); no cubriremos estas herramientas en esta guía, pero serán presentadas en Herramientas de terceros.