Usando propiedades en Subversion

Una de las características que añadió Subversion frente a CVS es la posibilidad de añadir metadatos a los elementos que son versionados. A estos metadatos se les denomina propiedades, pues son pares clave-valor adjuntos a cada elemento. Estas propiedades pueden tomar el valor que queramos, y también son versionadas.

Sin embargo, en Subversion hay una serie de propiedades que hacen que un archivo sea tratado de alguna manera especial. Una de estas propiedades es svn:keywords. Ésta permite sustituir una serie de palabras clave en un archivo versionado por información dinámica. Para ello es tan simple como definir la propiedad en el archivo, y en éste escribir $key$, lo que hará que el fichero se modifique a algo como $key: valor$
.

Usando las propiedades predefinidas por subversión, podemos fácilmente incluir en un archivo la última fecha de modificación, el autor de ésta, así como otros datos. Por ejemplo, podemos escribir al principio de un archivo de código prueba.c:

// $Id$

Y con el siguiente comando añadir la propiedad:

svn propset svn:keywords “Id” prueba.c

Y al hacer commit de este archivo se aplicarán las sustituciones en él:

// $Id: prueba.c 12 2007-11-01 19:40:16Z penyaskito $

Generalmente, cuando queremos hacer uso de esta característica, lo querremos hacer en todos los archivos de cierto tipo. Para ello, podemos hacer que estas propiedades se añadan por defecto. Esto se logra modificando el archivo de configuración config de subversion (en C:\Documents and Settings\User\Application Data\Subversion en Windows XP, /home/User/.subversion en Linux). Por ejemplo, queremos que todos nuestros archivos de código python tengan la propiedad svn:keywords de modo que se sustituya la revisión de la última modificación, el nombre del archivo, el autor de la última modificación y la fecha. Además, queremos que los retornos de carro se adapten al sistema operativo en el que estamos (propiedad svn:eol-style). Añadiremos la siguiente línea a la sección [auto-props]:

*.py = svn:eol-style=native; svn:keywords=Id Author Date Revision

Con ello, todos los archivos que creemos ahora con extensión .py tendrán estas propiedades.

Más info:
Version Control with Subversion. Chapter 7. Advanced Topics. Properties.

Patches para Google

Una de los últimos flecos por cerrar para finiquitar el Google Summer of Code es enviar el código a Google.

Yo no tengo problema, pues he trabajado en un repositorio de subversion para mi solo, pero en el caso de haber compartido el repositorio habría que enviar sólo nuestros patches.

Mark es una de las personas que se ven en esta situación, y como él está más agobiado que yo, le he echado una mano con esta tarea.

Para ello, que mejor que un script de bash. Se encarga de obtener todos los commits hechos por un usuario, y crear los patches correspondientes.

svn log | grep penyaskito | awk '/r[0-9]/ {print $1}' | tr -d 'r' > file
cat file |   # Supply input from a file
while read rev # As long as there is another line to read ...
do
        echo "svn diff -r $rev:$(($rev - 1)) > patches/$rev.patch"
        svn diff -r $rev:$(($rev - 1)) > patches/$rev.patch
done