miércoles, 17 de abril de 2013

Simulando en git , $Revision:$ de Subversion

Simulando en git , $Revision:$ de Subversion


Estamos en una charla con Yeradis, si sería posible simular algo como el id de $Revision:$ de SVN.
Particularmente, el numero de revisión automático me da igual, pero Yeradis es un 'plasta' con el tema,
nos hemos puesto los 2 y esto es lo que ha salido.

La idea , es usar los tags de git para hacer esa tarea
Lo  primero es generar un tag numérico que usaremos como inicio. Para ello nada más simple que hacer:
git tag -a 1

Después creamos un fichero, llámalo deploy.sh. Lo colocamos en /git/bin para que esté disponible.



#revision tags must be an INTEGER value
export tag=`git tag | sort -n | tail -1`

text=`echo $tag | sed "s/\([^0-9]*\)\([0-9]*\)/\1/"` ;
num=`echo $tag | sed "s/\([^0-9]*\)\([0-9]*\)/\2/"` ;
rev=`echo $text$(($num + 1))`

find ./ -name "*.c" -type f | while read file
do
    awk '{gsub(/\$Revision:(.*)\$/, "$Revision: '$rev' $"); print}' $file >$file.$$
mv -v $file.$$ $file
done

git commit -am "$1" && git tag -a $rev -m "$1" && echo "Revision:" $rev



Después en nuestro .gitconfig añadimos esta linea;




[alias]
deploy = !sh deploy.sh





Ahora , solamente tendremos que hacer;
git deploy "Nueva revision"

¿ Que hace esto ?

  1. Obtenemos el valor del ultimo tag, en este caso 1, y lo aumenta a 2
  2. Busca según el patrón "*.c", en este caso me interesa que busque solo los de código fuente de C, y      reemplaza la cadena $Revision: $ por la nueva revisión  , en este caso la 2., quedando como $Revision: 2$
  3. Realiza el commit
  4. Crea el tag con la nueva revisión.
 Este script se puede mejorar en muchos aspectos, pero abre una vía para una posible mejora, como controlar los errores devueltos, etc..








Android y Git. Disponer del hash automáticamente.

Una de las cosas a las que estoy acostumbrado, es tener siempre en mi código, el hash/tag/versión del control de versiones que estoy usan...