Patcher un module Drupal 8 avec Composer

Patcher un module Drupal 8 avec Composer

24 Jan 2018 |  Drupal

Maintenant que vous gérez vos projets Drupal 8 avec Composer il vous arrivera surement de vouloir corriger du code core ou contrib. Il y a plein de raisons qui peuvent amener un développeur à patcher du code contrib, par contre il n’y a pas de bonne excuse pour ne pas créer un patch et l’appliquer correctement. Même si certains grincent des dents à l’idée de modifier le code d’un module, il n’y a parfois pas d’autre choix. Ce qui est important c’est que toute l’équipe de dev suive un seul et unique process, que toutes les modifications apportées au code soient stockées dans un patch et qu’à chaque mise à jour le patch soit appliqué de nouveau.

Si vous utilisez le template de composer pour Drupal 8 celui-ci inclut le plugin Composer Patches pour Composer qui permet de gérer et appliquer automatiquement vos patchs à chaque fois que vous mettez à jour vos modules contribs.

L’ajout d’un patch est vraiment trivial. Editez le fichier composer.json et repérez la section extra puis ajoutez un tableau patches après l’objet “installer-paths” comme sur l’exemple ci-dessous. Au sein de ce tableau, créez un élément dont la clé est le nom du module à modifier. Ajoutez ensuite une description et le patch à utiliser. A noter que vous pouvez appliquer des patchs stockés localement ou en ligne, en utilisant l’adresse du patch directement depuis l’issue d.org par exemple.

"extra": {
    "installer-paths": {
        "web/core": ["type:drupal-core"],
        "web/libraries/{$name}": ["type:drupal-library"],
        "web/modules/contrib/{$name}": ["type:drupal-module"],
        "web/profiles/contrib/{$name}": ["type:drupal-profile"],
        "web/themes/contrib/{$name}": ["type:drupal-theme"],
        "drush/contrib/{$name}": ["type:drupal-drush"]
    },
    "patches": {
        "vendor/project": {
            "Patch title": "http://example.com/url/to/patch.patch"
            "Patch number 2": "http://example.com/url/to/patch-2.patch"
        },
        "vendor/other_project": {
            "Local Patch": "patchs/custom-patch-saved-with-the-project.patch"
        }
    }
}

Une fois terminé, il ne vous reste plus qu’à exécuter la commande composer installou composer update pour que Composer télécharge le module et applique le patch.

Pour plus d’information je vous invite à lire la documentation complète du plugin de patch pour Composer.

Je profite de l’occasion pour vous inviter à donner un peu de votre temps lorsque vous utilisez des patchs trouvés dans une issue Drupal.org. Si le patch en question résout votre soucis, dites le ! De même s’il ne marche pas, prenez le temps de décrire les actions faites, ce qui était attendu et le résultat que vous obtenez. Ces 5 minutes à expliquer votre utilisation du patch seront vraiment utiles au mainteneur du module qui a besoin de ces retours d’expériences pour avancer. Contribuer ce n’est pas que coder, c’est surtout communiquer et échanger.

Julien Dubreuil

Vous avez une idée, un projet web à réaliser ?

Ensemble, mettons en oeuvre sa réussite. Je vous accompagne dans vos projets, depuis l'élaboration du cahier des charges jusqu'à la mise en production. Pour plus d'information n'hésitez pas à me contacter.

Contactez-moi