Parche (Unix)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 25 de agosto de 2021; la verificación requiere 1 edición .

parche
Tipo de Utilidad UNIX [d]
Desarrollador Andreas Grünbacher, Jim Meyering
Sistema operativo Software multiplataforma
Primera edición 1985
ultima versión
Licencia GPL
Sitio web savannah.gnu.org/proyecto…

patch es una utilidad de  software de Unix diseñada para transferir ediciones (cambios) entre diferentes versiones de archivos de texto. La información sobre la edición generalmente se encuentra en un archivo separado llamado "parche", "editar" o "archivo de edición" (" archivo de parche " - archivo de parche en inglés  ). Dicho archivo generalmente se crea utilizando otra utilidad de Unix, diff , que extrae automáticamente información sobre las diferencias en el texto de los archivos.

Historia

El programa de parches original fue escrito por el futuro autor de Perl , Larry Wall ( publicado en mod.sources ). Hoy en día, el programa de parches es parte del Proyecto GNU y es mantenido por la FSF .

Uso

Si bien la intención original de un programa era salvar las diferencias entre las versiones de los archivos del programa (para que un programador que hiciera cambios útiles en su programa pudiera compartir esos cambios con otros programadores que usaban versiones anteriores del código), el parche se puede usar para salvar las diferencias. entre dos archivos de texto, incluidos, entre otros, la documentación del programa, los archivos html, etc.

Los "archivos de cambios" o "parches" o, informalmente, "parches" utilizados por la utilidad de parches ("archivos de parches", "parches") son archivos de texto en un formato especial. A diferencia de ellos, también hay archivos binarios con un propósito similar, sin embargo, estos últimos, por regla general, no tienen nada que ver con la utilidad de parche y están asociados con las tareas de realizar cambios en los archivos binarios (que no son de texto), incluido el programa. archivos ejecutables.

Contenido de los archivos de parches

Los archivos que son el resultado del trabajo de diff tienen un formato determinado, que es conveniente, entre otras cosas, para leer y editar "manualmente" por el propio usuario.

Un ejemplo del contenido de dicho archivo:

--- a/ruta/al/archivo 2021-01-26 22:55:55.288371691 +0300 +++ b/ruta/al/archivo 2021-01-26 22:58:31.790414616 +0300 @@ -1.5 +1.8 @@ +#incluye <stdio.h> + En t -main(vacío) +main(int argc, char** argv) { + printf("%s: Ejemplo de uso de `diff`;\n", __FILE__); devolver 0; }

La línea que comienza con un triple signo menos (en el caso más simple, la primera línea) contiene la ruta relativa al archivo original y la hora de la última modificación. Luego, en la línea siguiente, después del triple signo más, está la ruta relativa y la hora de la última modificación de la versión final del archivo que se usó para crear el parche.

Además, en la línea que comienza y termina con el símbolo doble "@" después del signo "menos", el número de línea del comienzo de la sección de texto dada y la cantidad de líneas que ocupaba esta sección en la versión anterior del archivo se indican, y tras el signo "más", características similares de la sección en el nuevo fichero. A continuación se muestra la sección en sí, donde se agrega un espacio al comienzo de cada línea si la línea no ha cambiado, "menos" si no está en el nuevo archivo y, en consecuencia, "más" si se ha agregado esta línea. En el archivo de ejemplo anterior, solo hay uno de esos segmentos, pero puede haber cualquier número de ellos. Además, el parche puede contener información sobre los cambios realizados en otros archivos si el comando diffse aplicó a un directorio.

Muy a menudo, la aplicación de parches ocurre en el contexto del uso de algún tipo de sistema de control de versiones . Si el archivo de cambios se creó usando uno de ellos, por ejemplo , git , entonces el formato no será fundamentalmente diferente, simplemente puede contener información adicional que es redundante para la utilidad patch.

Ejemplo de uso

Para crear un parche o editar un archivo, usando la utilidad diff, ejecute:

$ diff -u archivo_antiguo nuevo_archivo > diff.diff # El interruptor -u le dice a diff que imprima la diferencia en lo que se llama formato "estándar" ("unificado")

Para aplicar el parche resultante, ejecute el siguiente comando:

$ parche <diferencia.diff

Ejecutar el último comando transferirá la diferencia del archivo nuevo al anterior, actualizando el archivo anterior. (Si el archivo anterior no se encuentra en la ruta dada, el programa arrojará un error).

El parche se puede "revertir", es decir, cancelar, pasando el interruptor -R al programa de parche:

$ patch -R < diferencia.diff

Como regla general, la utilidad de parche puede actualizar correctamente el archivo incluso si ha cambiado algo (por ejemplo, se ha editado en un área que no se superpone con el alcance del parche actual).

Para hacer esto, la utilidad del parche usa un "contexto": unas pocas líneas adyacentes al alcance del parche, almacenadas en el archivo de edición junto con otra información sobre el reemplazo.

Sin embargo, en el caso de una discrepancia significativa entre el archivo al que se aplica el parche ("aplicado") y el archivo de origen utilizado para crear el parche, la corrección de la aplicación del parche, en términos generales, no está garantizada.

Porting (portar a otras plataformas)

Creado para su uso en sistemas Unix, la utilidad de parche se ha portado desde entonces a la plataforma Windows y varios otros. Las versiones de parches de Windows se pueden encontrar en los paquetes GnuWin32 y UnxUtils , así como en el entorno Cygwin .

Véase también

  • Colcha
  • sincronizar
  • IEBUPDTE es un análogo del programa de parches, creado unos 20 años antes (presumiblemente en 1964 para los mainframes del Sistema 360 ).

Notas

  1. https://git.savannah.gnu.org/cgit/patch.git/tag/?h=v2.7.6

Enlaces

  • patch(1): aplicación de un archivo diff al original - página del manual de comandos personalizados de GNU / Linux  
  • Patchutils  - Programas adicionales para trabajar con parches
  • Herramientas GNU para Win32  : puerto Win32 de las utilidades GNU, incluidos diff y patch
  • diffstat  : emisión de estadísticas basadas en la salida de la utilidad diff