05.11Guia de 10 minutos de diff y patch
Situación uno: estas tratando de compilar un paquete desde la fuente y descubres que alguien ya ha hecho el trabajo por ti de modificarlo ligeramente para compilar en tu sistema. Ellos dispusieron su trabajo en forma de parche (“patch” en inglés), pero no estás seguro de como hacer uso de éste. La respuesta es que aplicas el parche al código original con una herramienta de línea de comandos llamada, adecuadamente, patch.
Situación dos: bajaste el código fuente de un paquete open source y despues de más o menos una hora de editarlo, lograste compilarlo en tu sistema. Te gustaría que tu trabajo esté disponible para otros programadores, o para los autores del paquete, sin tener que redistribuir el todo paquete modificado. Ahora estás en la situación donde requieres crear tu propio parche, y la herramienta que necesitas es diff (de diferencia en inglés).
Esta es una guia rápida para diff y patch que te ayudará en esas situaciones, mediante la descripción de las herramientas más frecuentemente usadas. Te dice lo suficiente para empezar de la manera correcta. Despues, puedes aprender los pormenores de diff y patch en tu tiempo libre, usando las páginas del manual.
Aplicando parches con patch
Para aplicar un parche a un solo archivo, cambiate al directorio donde esta localizado el archivo e invoca a patch:
patch < foo.patch
Estas instrucciones asumen que el parche esta distribuido en un formato unificado, que identifica al archivo al cual el parche debe ser aplicado. Sino, puedes especificar el archivo desde la línea de comandos:
patch foo.txt < bar.patch
Aplicar parches a directorios enteros (quizás el caso más común) es similar, pero hay que tener cuidado acerca de elegir un “nivel p”. Lo que esto quiere decir es que, dentro de los archivos de parches, los archivos a ser parcheados se identifican por las rutas de acceso, las cuales pueden ser diferentes ahora que los archivos estan localizados en tu computadora en lugar de la computadora donde se creó el parche. El nivel p indica al parche que ignore partes de la ruta de acceso a fin de que pueda identificar correctamente los archivos. La mayoría de las veces servirá un nivel p de uno, así que usa:
patch -p1 < baz.patch
Debes cambiar al nivel superior del directorio fuente antes de ejecutar este comando. Si un nivel de parche de uno no identifica correctamente ningún archivo para parchear, revisa el archivo del parche en busca de los nombres de los archivos. Si ves un nombre como:
/users/stephen/package/src/net/http.c
y estas trabajando en un directorio que contiene net/http.c, usa
patch -p5 < baz.patch
En general, cuenta uno por cada separador (caracter slash) que remuevas desde el principio de la ruta, hasta que lo que quede sea la ruta que existe en tu directorio de trabajo. La cuenta alcanzada es el nivel p.
Para remover un parche, usa la opción -R, por ejemplo
patch -p5 -R < baz.patch
Creando parches con diff
Usar diff es simple si se trabaja con archivos individuales o directorios fuentes enteros. Para crear un parche de un único archivo, usa la forma:
diff -u original.c new.c > original.patch
Para crear un parche de un árbol fuente entero, haz una copia del árbol:
cp -R original new
Haz cualquier cambio requerido en el directorio new/. Entonces crea un parche con el siguiente comando:
diff -rupN original/ new/ > original.patch
Esta es toda la información que necesitas para iniciarte con diff y patch. Para más información usa:
man diff man patch
Texto original de Sthepen Jungels, puedes leerlo en inglés aquí


Deja una respuesta