Si habeis llegado hasta aquí es porque os encontrais ante la situación de querer aplicar una actualización o un cambio que no está disponible en estos momentos en la comunidad.
¿Que es un parche?
Un parche es un cambio en el código que principalmente corrige, mejora o cambia sutilmente el código de un módulo.
¿Es recomendado utilizar un parche?
Los parches son cambios temporales que aplicamos a un módulo, por lo tanto, cuando el módulo se actualice es bastante probable que este parche ya no funcione, o bien porque ya se ha integrado en el módulo o bien porque los archivos han variado y ya no es posible aplicarlo.
¿Como instalo parches con composer?
Para poder instalar y gestionar los parches mediante composer necesitamos requerir el módulo "composer-patches", podemos hacerlo de la siguiente manera.
composer require cweagans/composer-patches
Esto nos actualizará el archivo composer.json con el módulo indicado, pero aquí no hemos terminado, deberemos crear en el apartado "extra" el lugar dónde escribiremos todos nuestros parches.
"extra": {
"patches": {
"drupal/core": {
"Add startup configuration for PHP server": "https://www.drupal.org/files/issues/add_a_startup-1543858-30.patch"
}
}
}
ATENCIÓN: Este ejemplo asume que no tienes nada más dentro de extra, cosa que no es lo común, por lo tanto ten en cuenta que tienes que mantener lo que ya exista en esa sección en caso de que lo estes utilizando.
En el ejemplo arriba indicado podeis observar que estamos aplicando un parche al core de Drupal. Ahora vamos a ver un ejemplo que nos ayudará a entender como aplicar un parche.
Primero de todo, vamos a buscar el parche que necesitamos..
En este caso como podeis observar quiero aplicar un parche para el tema "gin". Esta información es muy importante para poder aplicar el parche. Además voy a coger el título y el ID de la issue para poder localizar este post en el futuro en caso de necesitarlo, en este caso.. "Improve content form detection - 3188521" y finalmente el parche que quiero aplicar.. en este caso "https://www.drupal.org/files/issues/2021-05-19/3188521-8.patch".
Con toda esta información vamos a actualizar nuestro composer json para que aplique el parche.
"extra": {
"patches": {
"drupal/core": {
"Add startup configuration for PHP server": "https://www.drupal.org/files/issues/add_a_startup-1543858-30.patch"
},
"drupal/gin": {
"Improve content form detection - 3188521": "https://www.drupal.org/files/issues/2021-05-19/3188521-8.patch"
}
}
}
Una vez confirmado que la información es correcta procederemos a ejecutar lo siguiente:
composer update
Este comando eliminará el módulo para volver a instalarlo con el parche aplicado. Si todo ha salido bien, el proceso habrá terminado sin ningún error y podremos seguir con nuestro proyecto.
¿El parche no se ha aplicado o da error?
Es bastante común que a lo largo de nuestra experiencia nos encontremos con parches que, o bien no aplican, o bien ya no son compatibles.
Para ver que puede estar fallando podemos utilizar el comando anteriormente citado pero modo "verbosa" el cual nos mostrará por pantalla el motivo por el cual no puede aplicar el parche
composer update -vvv
Hay varias respuestas que nos puede devolver, entre las más famosas, cuando no encuentra el archivo o cuando las líneas sobre las que tiene que aplicar el parche no las puede localizar correctamente. Entonces... ¿Está todo perdido? NO! Para ello dependiendo el conocimiento y valor que tengamos podemos analizar que es lo que hace el parche y rehacerlo para que aplique sobre nuestra versión, pero esto ya se quedará para otro capítulo de Vazcell.
Y vosotros ¿Utilizais composer patches en vuestro día a día?