Como aplicar un parche

De MoodleDocs

Introducción

Esta página explica como puede aplicar un fichero en formato parche (patch). 'patch' es a la vez un formato estándar y una herramienta para aplicar dicho formato, y existen varias maneras de aplicarlo. Escoja la que sea más fácil para usted.

Probablemente la más crítica sea el uso de la opción '-p', que le indica a 'patch' la relación entre el directorio donde está ubicado el fichero patch y los ficheros a parchear. Vea las referencias de abajo para detalles adicionales y NO presuponga nada.

Como aplicar un parche en Windows usando gnuwin32

  • Descargue y extraiga patch para Windows desde sourceforge. Yo he colocado el binario de patch.exe en C:\bin (NOTA: Las cosas son mucho más fáciles si se coloca el binario en un directorio que no tenga espacios en blano en el nombre).
  • Descargue y extraiga Moodle en alguna parte, por ejemplo en C:\moodle
  • Descargue el fichero en formato parche y colóquelo en el mismo directorio en el que puso Moodle (p.ej. C:\moodle\password-policy-17.diff)
  • Abra el fichero en formato parche con Wordpad. Pulse en 'Fichero" >> "Guardar como...", elija un nuevo nombre para el fichero (p.ej. minuevoparche.diff) y pulse en "Guardar como tipo" y elija "Documento de texto - Formato MS-DOS"
  • Abra una ventana de órdenes de sistema y teclee:
   cd \moodle
   c:\bin\patch.exe --dry-run -p1 < minuevoparche.diff
El número tras la opción '-p' puede variar dependiendo del fichero en formato parche, puesto que depende de la forma en que se generó dicho fichero. Eche una ojeada a la página del manual de la utilidad 'patch' para ver como funciona la opción '-p'. También puede echar una ojeada a este tutorial de patch y diff.
  • Debería obtener una salida similar a ésta (los nombres y cantidad de fichero parcheados varía de parche a parche)
   patching file admin/settings/security.php
   patching file lang/en_utf8/admin.php
   patching file lib/moodlelib.php
   patching file login/change_password.php
   patching file login/signup.php
   patching file user/edit.php
   Hunk #1 succeeded at 430 (offset 2 lines).
En este momento el parche aún no ha sido aplicado. Sólo hemos simulado su aplicación (con la opción '--dry-run'), para ver si íbamos a encontrar algún problema con él. Antes de explicar como aplicar realmente el parche, vamos a hablar de qué podría ir mal y como tratarlo.

Problemas potenciales y como tratarlos

Problemas potenciales

Si todo va bien, el parche se aplicará límpiamente y 1la vida será magnífica!. Pero a veces el parche no se aplicará 100% límpiamente debido a una diferencia de versiones entre los ficheros originales utilizados para crear el parche y sus ficheros locales. En este caso la orden 'patch' intentará aplicar tantos cambios como sea posible, y emitirá algunos mensajes de diagnóstico describiendo los problemas que se encuentra.

  • Si obtiene algunos mensajes similares a 'Hunk #n succeeded...', el parche se habría aplicado correctamente aunque en diferentes números de línea que en el fichero original. Si hubiéramos aplicado el parche realmente (recuerde que hemos usado la opción '--dry-run'), la orden patch habría creado un fichero adicional por cada uno de los ficheros donde el trozo en cuestión (hunk) se aplicó en un desplazamiento diferente. Este fichero adicional se llamaría igual que el fichero original con la extensión adicional .orig.
  • Si obtiene algunos mensajes similares a 'Hunk #n failed...', el parche no se habría aplicado correctamente. En este caso la orden 'patch' habría creado dos ficheros adicionales por cada uno de los ficheros donde el trozo en cuestión no se habría aplicado correctamente, llamados:
    • nombre-fichero-original.orig    Este sería el fichero original antes de aplicarle el parche, justo como arriba.
    • nombre-fichero-original.rej     Este fichero contendría los trozos (hunks) que no habrían podido ser aplicados correctamente, para que usted pudiera examinarlos.

Como tratar los problemas potenciales

Tratar el primer problem (los trozos aplicados en un desplazamiento diferente) es trivial: sólo necesitamos borrar los ficheros .orig una vez hayamos aplicado el parche realmente.

En el segundo caso (trozos no aplicados), a menos que sepa como arreglar los trozos fallados a mano, usted no debería aplicar el parche, puesto que eso corrompería su instalación de Moodle dejándola inoperativa. Si desea aplicar el parche e intentar arreglar los trozos no aplicados a mano, debería usar la opción '-b'. Esa opción crea automáticamente una copia de seguridad de cada fichero al que se aplica el parche con la extensión .orig. Eso le permitirá volver al punto de partida en caso de necesidad simplemente sobrescribiendo los ficheros modificados con las copias de seguridad de extensión .orig.

A veces habrá grandes diferencias en los números de línea desde que se generó el parche y el parche no se aplicará con éxito. Puede indicarle a la orden patch que permita mayores diferencias en los números de línea usando la opción '-F' para incrementar la diferencia que puede existir en el número de líneas. Por ejemplo patch -F 100 permitiría hasta 100 líneas de diferencia.

Como aplicar el parche realmente

Ahora que ya sabemos que puede ir mal y como tratarlo, veamos como aplicar el parche. Sólo necesitamos eliminar la opción '--dry-run':

   cd \moodle
   c:\bin\patch.exe -p1 < mynewpatch.diff

y opcionalmente usar la opción '-b' si vamos a intentar arreglar los trozos fallidos a mano:

   cd \moodle
   c:\bin\patch.exe -b -p1 < mynewpatch.diff

Aplicar un parche en Linux usando 'patch'

Use algo como:

   patch -p1 < patchfile.diff

Vea también aquí para obtener detalles adicionales sobre como usar 'patch' en Linux

Vea también