#!/bin/bash # Script para crear los parches que serán los nuevos "paquetes" de NuLies. # # Ender para el proyecto NuLies. # Última actualización: 16 de agosto de 2004 # # Forma de utilización: "haz_parche árbol [src_linux]" # donde src_linux es el directorio donde estan albergadas las fuentes # del núcleo de Linux, por defecto /usr/src/linux. # # Por hacer: # - Quizás que el parche sea bzip2. # # Cambios: # haz_parche (1.5) # # - Borramos unos antiestéticos «Sólo en [...]» que pone el grep al # encontrar ficheros en uno solo de los árboles. # # -- Ender lun ago 16 16:13:50 CEST 2004 # # haz_parche (1.4) # # - Debido a la traducción de los ficheros config.in de cada una de # las correspondientes arquitecturas, hay que ampliar el área de # visión del diff y decirle que ignore los directorios CVS. # # -- Ender jue mar 29 02:19:34 CEST 2001 # # haz_parche (1.3) # # - La ruta que aparece en el diff es, por ser breve, insana. Antes de # generar el diff, hacemos cd dentro del directorio del árbol correspondiente. # - He simplificado un poco la parte de controlar la versión del paquete que # se va a generar. # # -- Ender lun ene 15 02:03:04 CET 2001 # # haz_parche (1.2) # # - Chequeos de sanidad (revisa que exista DIR_DOC) # - El script coloca automáticamente la versión del parche. # - Averigüamos automágicamente la versión del núcleo. ;-) # # -- Ender sáb ene 13 03:27:19 CET 2001 # # haz_parche (1.1) # # - Creación. # # -- Ender sáb ene 13 01:48:54 CET 2001 # Sitio donde están los árboles de documentación. DIR_DOC="`dirname $0`/../web" # Sitio donde está el árbol del núcleo. DIR_KERNEL="${2-/usr/src/linux}" # Sitio donde están los paquetes del núcleo. DIR_PAQUETES="`dirname $0`/../web/paquetes" if [ "$#" -eq 0 -o "$#" -ge 3 ] then echo "Forma de uso: `basename $0` arbol [src_linux]" >&2 echo " donde src_linux es donde se encuentran las fuentes" >&2 echo " de Linux, por defecto /usr/src/linux/" >&2 exit 1 fi if [ ! -d $DIR_DOC/$1 ] then # No existe tal directorio. echo "El directorio $DIR_DOC/$1 no existe." >&2 exit 1 fi # Código robado de linux/scripts/patch-kernel # --- # set current VERSION, PATCHLEVEL, SUBLEVEL eval `sed -n 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' $DIR_KERNEL/Makefile` if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] then echo "Soy incapaz de determinar la versión actual del núcleo." >&2 exit 1 fi echo "Versión del núcleo del paquete: $VERSION.$PATCHLEVEL.$SUBLEVEL" FULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL" # --- # Nos aseguramos que este es el árbol correcto: if [ "$1" != "$VERSION.$PATCHLEVEL" ] then echo "La versión del árbol de documentación utilizada ($1)" >&2 echo " no coincide con la del árbol del núcleo ($VERSION.$PATCHLEVEL)." >&2 exit 1 fi # Nos enteramos de cuál es la última versión del paquete en el repositorio. if [ ! -f $DIR_PAQUETES/NuLies-${FULLVERSION}-1.gz ] then # Significa que no hay ninguna versión. ULTIMA_VERSION=0 else # La expresión regular ha sido un inmenso dolor... :-( ULTIMA_VERSION=`ls $DIR_PAQUETES/NuLies-$FULLVERSION*.gz \ | sed -n 's/\(.*NuLies-[1-9].*-\)\(.*\)\(\.gz\)/\2/p' \ | sort -n -r | head -1` fi PARCHE="paquetes/NuLies-${FULLVERSION}-`expr $ULTIMA_VERSION + 1`.gz" # Vemos si lo hemos hecho bien. :-) echo $PARCHE cd $DIR_DOC diff -u --recursive --exclude=CVS $DIR_KERNEL/ $1/ \ | egrep -v '(^Sólo|^Only)' | gzip -c -9 > $PARCHE