miércoles, 10 de agosto de 2016

patch

El programa patch se usa para aplicar cambios a archivos de texto. Acepta salida de diff y generalmente se usa para convertir versiones antiguas de archivos en versiones más nuevas. Consideremos un ejemplo famoso. El kernel Linux es desarrollado por un equipo grande y poco organizado de contribuidores que envían un flujo constante de pequeños cambios al código fuente. El kernel Linux consta de varios millones de líneas de código, mientras que los cambios que cada vez hace un contribuidor son bastante pequeños. No tiene sentido que un contribuidor envíe a cada desarrollador un código fuente completo del kernel cada vez que realiza un pequeño cambio. En su lugar, envía un archivo diff. El archivo diff contiene el cambio de la versión anterior del kernel a la nueva versión con los cambios del contribuidor. El que lo recibe usa el programa patch para aplicar el cambio a su propio código fuente. Usar diff/patch proporciona dos ventajas significativas:
  1. El archivo diff es muy pequeño, comparado con el tamaño del código fuente completo.
  2. El archivo diff muestra de forma concisa el cambio a realizar, permitiendo a los revisores del parche evaluarlo rápidamente.
Claro que, diff/patch funcionará con cualquier archivo de texto, no sólo con código fuente. Será igualmente aplicable a archivos de configuración o cualquier otro texto.

Para preparar un archivo diff para usarlo con patch, la documentación GNU (consulta la sección Para Saber Más al final del capítulo) sugiere usar diff de la siguiente manera:

diff -Naur old_file new_file > diff_file

Donde old_file y new_file son archivos individuales o directorios que contengan archivos. La opción r soporta recursividad en el árbol de directorios.

Una vez que el archivo diff ha sido creado, podemos aplicarlo para parchear el archivo antiguo y convertirlo en el nuevo archivo:

patch < diff_file

Lo demostraremos con nuestro archivo de pruebas:

[me@linuxbox ~]$ diff -Naur file1.txt file2.txt > patchfile.txt
[me@linuxbox ~]$ patch < patchfile.txt
patching file file1.txt
[me@linuxbox ~]$ cat file1.txt
b
c
d
e

En este ejemplo, hemos creado un archivo diff llamado patchfile.txt y luego hemos usado el programa patch para aplicar el parche. Fíjate que no hemos tenido que especificar un archivo de destino para patch, ya que el archivo diff (en formato unificado) ya contiene los nombres de archivo en la cabecera. Una vez que se aplica el parche, podemos ver que file1.txt ahora coincide con file2.txt.

patch tiene una gran número de opciones, y hay programas adicionales que pueden usarse para analizar y editar parches.

No hay comentarios:

Publicar un comentario