La herramienta informática patch es un programa de Unix que actualiza archivos de texto según las instrucciones contenidas en un archivo independiente, llamado archivo de parche . El archivo de parche (también llamado parche para abreviar) es un archivo de texto que consta de una lista de diferencias y se genera ejecutando el programa diff relacionado con el archivo original y actualizado como argumentos. La actualización de archivos con parche se suele denominar aplicación del parche o simplemente parchear los archivos.
El programa de parche original fue escrito por Larry Wall (quien luego creó el lenguaje de programación Perl ) y publicado en [1] (que luego se convirtió en ) en mayo de 1985.mod.sources
comp.sources.unix
Se agregó un parche a XPG4, que luego se convirtió en POSIX . [2] El código de Wall sigue siendo la base de los programas de "parche" proporcionados en OpenBSD , [3] FreeBSD , [4] y schilytools. [5] [ dudoso – discutir ] Se dice que la Open Software Foundation , que se fusionó con The Open Group , mantuvo una versión derivada. [ dudoso – discutir ]
El proyecto GNU / FSF mantiene su propio parche, derivado de la versión de Larry Wall. El repositorio es diferente al de GNU diffutils, pero la documentación se gestiona de forma conjunta. [6]
Desarrollado por un programador para otros programadores, el parche se utilizaba con frecuencia para actualizar el código fuente a una versión más reciente. Debido a esto, muchas personas comenzaron a asociar los parches con el código fuente, mientras que los parches, de hecho, se pueden aplicar a cualquier texto. Los archivos parcheados no acumulan ningún texto innecesario, que es lo que algunas personas perciben según el significado en inglés de la palabra; el parche es tan capaz de eliminar texto como de agregarlo.
Los parches descritos aquí no deben confundirse con los parches binarios , que, aunque pueden ser conceptualmente similares, se distribuyen para actualizar los archivos binarios que componen el programa a una nueva versión.
Los archivos diff que sirven como entrada para el parche son archivos de texto legibles, lo que significa que pueden ser revisados o modificados fácilmente por humanos antes de su uso.
Además del programa " diff ", otros programas también pueden generar diferencias, como Subversion , CVS , RCS , Mercurial y Git .
Los parches han sido un componente crucial de muchos sistemas de control de código fuente , incluido CVS .
Cuando se utilizan diffs más avanzados, los parches se pueden aplicar incluso a archivos que se han modificado mientras tanto, siempre que esas modificaciones no interfieran con el parche. Esto se logra utilizando " diffs de contexto " y " diffs unificados " (también conocidos como "unidiffs"), que rodean cada cambio con contexto , que es el texto inmediatamente antes y después de la parte modificada. Patch puede entonces utilizar este contexto para localizar la región a ser parcheada incluso si ha sido desplazada por cambios anteriores en el archivo, utilizando los números de línea en los diffs como punto de partida. Debido a esta propiedad, el contexto y los diffs unificados son la forma preferida de parches para enviar a muchos proyectos de software.
Las características mencionadas anteriormente hacen que diff y patch sean especialmente populares para intercambiar modificaciones en software de código abierto . Los usuarios externos pueden descargar el último código fuente disponible públicamente, realizar modificaciones en él y enviarlas, en formato diff, al equipo de desarrollo. Al utilizar diffs, el equipo de desarrollo tiene la capacidad de revisar eficazmente los parches antes de aplicarlos y puede aplicarlos a una base de código más nueva que la que tenía acceso el desarrollador externo.
Para crear un parche, se podría ejecutar el siguiente comando en un shell:
$ diff -u oldFile newFile > mods.diff # -u le dice a diff que genere un formato diff unificado
Para aplicar un parche, se podría ejecutar el siguiente comando en un shell:
$ parche < mods.diff
Esto le indica al parche que aplique los cambios a los archivos especificados que se describen en mods.diff
. Los parches a los archivos en subdirectorios requieren la opción adicional, donde el número es 1 si el directorio base del árbol de origen está incluido en la diferencia y 0 en caso contrario.-pnumber
Los parches se pueden deshacer o revertir con la -R
opción ' ':
$ parche -R < mods.diff
En algunos casos, cuando el archivo no es idéntico a la versión con la que se generó la diferencia, el parche no podrá aplicarse correctamente. Por ejemplo, si se insertan líneas de texto al principio, los números de línea a los que se hace referencia en el parche serán incorrectos. El parche puede recuperarse de esto, observando las líneas cercanas para reubicar el texto que se va a parchear. También se recuperará cuando se alteren las líneas de contexto (para contexto y diferencias unificadas); esto se describe como fuzz .
Patch fue escrito originalmente para sistemas Unix y similares , pero también se ha adaptado a Windows y a muchas otras plataformas. GnuWin32 y UnxUtils proporcionan versiones de patch para Windows .
Un patch
comando también es parte de las herramientas MSX-DOS2 de ASCII para MSX-DOS versión 2. [7]