Parcheando Drupal 8 con Composer

portadasblog.jpg
Solucionex
16
Oct 19

A veces, en nuestros proyectos con Drupal 8 nos encontramos con un módulo que no satisface nuestras necesidades y nos vemos en la tesitura de tener que extender su funcionalidad. Para este cometido hacemos uso de los parches. Vamos a ver cómo crearlos y automatizar su aplicación con Composer.

Vamos a dar por hecho que hemos añadido a nuestro Drupal 8 el siguiente módulo contribuido en su versión 8.x-1.0 lanzando en terminal el siguiente comando composer:

composer require 'drupal/contrib_module:^1.0'

¿Cómo creamos un parche?

Para crear un parche nos dirigimos al repositorio de nuestro contrib_module, por ejemplo https://git.drupalcode.org/project/contrib_module, y nos clonamos en nuestro equipo el repositorio.

git clone --branch 8.x-1.0 https://git.drupalcode.org/project/contrib_module

Una vez tenemos el proyecto clonado, accedemos al mismo y comprobamos que la rama en la que estamos trabajando coincide con la de la versión que hemos instalado:

git checkout

Este es un paso a tener en cuenta ya que si la rama de nuestro parche no coincide con la versión del módulo que hemos instalado, Composer nos dará un error a la hora de aplicarlo.

Ahora podemos editar el código de nuestro contrib_module para que cumpla con las funcionalidades que queremos.

Una vez hemos terminado con el desarrollo tenemos que crear el archivo .patch que utilizaremos para aplicar nuestros cambios sobre nuestro módulo contribuido contrib_module. Para ello lanzamos el siguiente comando git:

git diff * > contrib_module_patch_20191016.patch

Drupal recomienda la siguiente nomenclatura a la hora de nombrar nuestros parches [descripción-del-parche]_[número-del-issue]_[número-del-comentario].patch, pero en nuestro caso vamos a suponer que el parche es de uso privado y no vamos a publicarlo en la comunidad.

Creado nuestro archivo .patch volvemos a nuestro proyecto Drupal 8.

Automatizando parches con Composer

Localizados ya en nuestro proyecto, creamos en la raíz la carpeta /patches y ahí pegaremos nuestro archivo contrib_module_patch_20191016.patch.

En nuestro composer.json añadimos la siguiente línea dentro del array extra:

"patches-file": "composer.patches.json"

Y por último, creamos el archivo composer.patches.json en el mismo lugar donde se encuentra el composer.json. Este archivo contendrá nuestros parches y se verá tal que así:

{
    "patches": {
        "drupal/contrib_module" : {
            "Extends contrib_module with new functionalities" : "patches/contrib_module_patch_20191016.patch"
        }
    }
}

Con esto ya solamente necesitamos lanzar el comando composer install y nuestro parche se aplicará al módulo contribuido contrib_module.