Dos de las herramientas esenciales en el desarrollo de software son Patch y Diff. No es un misterio cómo funcionan, pero pienso que este será un post interesante. 🙂
Ambas son muy potentes, y esto es solo como tocar la superficie, tienen más utilidades y otras funciones. Básicamente con estas dos herramientas podemos crear control de versiones,
Diff
Nos referimos a comparación, compara un archivo «original» con el «nuevo», y nos informa de las diferencias que existen entre ellos. Esta herramienta también permite crear archivos .patch que nos sirven para crear parches de nuestros programas.
Patch
Es el comando con el que literalmente «parcheamos» nuestro archivo original, agregando y/o eliminando líneas de acuerdo a las instrucciones contenidas en el archivo .patch
También existe vimdiff, que es una herramienta visual para aplicar los parches sin necesidad de un archivo .patch, ya que compara «original» y «nuevo» y sobre el mismo archivo es posible editar línea por línea o todo el documento. Esto no lo explicaré pero creo que merece una mención.
Ejemplo
Ahora sí lo divertido. ¡Ejemplo!
Este es el caso, tenemos un script genial que pide tu nombre y tu edad, si eres mayor de 18 años te dice que puedes votar, del caso contrario te dice que no puedes votar.
original.sh
#!/bin/bash echo "Escribe tu nombre: " read nombre echo "Escribe tu edad: " read edad if [[ 18 -lt $edad ]] then echo "Hola $nombre, tienes $edad ¡Y puedes votar!" else echo "Hola $nombre, tienes $edad y no puedes votar..." fi
Imagen del código en Vim
Listo, aquí se muestra el script en ejecución:
Parece que todo funciona bien
Entonces, como buenos usuarios que somos, compartimos nuestro script a un amigo :), pero nos llega un mensaje diciendo que tiene una falla, que cuando tiene 18 dice que no puede votar cuando sí debería.
Error de lógica 🙁
Ahora nos ponemos a corregir el pequeño error y a hacer unas cuantas modificaciones…
nuevo.sh
#!/bin/bash maxEdad=18 echo "Escribe tu nombre: "; read nombre echo "Escribe tu edad: "; read edad if [[ $maxEdad -le $edad ]]; then echo "Hola $nombre, tienes $edad años ¡Y puedes votar!" else echo "Hola $nombre, tienes $edad años y no puedes votar..." fi exit 0
Código nuevo escrito en Vim
Supongamos que el script es muy pesado. Entonces, para no mandar de nuevo todo el script, creamos un .patch 😀
$ diff -u original.sh nuevo.sh > parche.patch
Y ahora tenemos nuestro parche. Acá una vista en Vim:
Así se ven las instrucciones de un .patch. En blanco las líneas que no se modificaron, en azul las eliminadas, en naranja las agregadas.
Y para aplicarlo simplemente usamos el archivo .patch en el script a parchar. Acá se llama originalAmigo.sh, que es una copia exacta del script original.sh
Script del amigo
$ patch originalAmigo.sh < parche.patch
Y esto nos deja nuestro archivo originalAmigo.sh así:
Script del amigo después de aplicar el parche
Como pueden ver es muy fácil obtener los diff y aplicar los patch. De mi parte es todo.
Saludos gente, nos leemos el próximo viernes.
9 comentarios, deja el tuyo
Genial, muchas gracias 🙂
Si deseas un poco de color, usa colordiff ^__^
Ahora entiendo cómo funcionan los parches en Debian.
Hola, se que se pueden mostrar notificaciones del sistema con notify-send desde la consola, pero lo que quisiera hacer es poder programar a que hora o en cuanto tiempo me muestre una notificacion, hay alguna manera de hacerlo? Uso elementary, el cual tiene su base en Ubuntu 12.04, por si es de ayuda, gracias
Pues si se puede hacer usando el cron del sistema 😉
y eso como se puede hacer? apenas aprendí a usar el comando notify-send
Puedes buscar cron acá en el blog hay muchos post sobre el 🙂
Muy bueno, gracias!
Siempre uso esto para actualizar el kernel, descargo solo los patch y aplico a los sources, así no tengo que bajar 80mb cada release.