
Il arrive parfois qu'après une mise à jour un module ne fonctionne plus comme attendu et qu'apparaisse un bug. La réponse au problème c'est le Patch mais comment patcher un module de Drupal? C'est ce que nous allons voir dans cet article.
Bien sûr on ne teste pas un patch sur un environnement de production! ;)
Appliquer un Patch
Pour patcher un module de Drupal, on se positionne dans le répertoire root du projet. Pour un patch Drupal, on se rend dans le répertoire root de Drupal, pour un module ou un theme contrib dans le répertoire correspondant au projet.
On peut utiliser Git pour appliquer un patch sur un repository :
git apply -v path/file.patch
On peut aussi utiliser --index option pour voir les fichiers modifiés par le patch :
git apply -v --index path/file.patch
Si vous n'utilisez pas git ou que le repository n'est pas local :
patch -p1 < path/file.patch
Remarque: git apply échouera si le patch n'est pas dans son référentiel projet. Il faut plutôt utiliser patch -p1 <chemin / fichier.patch.
L'option -p indique au correctif le nombre de préfixes principaux à supprimer. Pour les correctifs créés à l'aide de git, -p1 est normalement la bonne option et est la valeur par défaut pour git apply. Si cela ne fonctionne pas, essayez plutôt l'une des commandes ci-dessus avec -p0.
Si le correctif n'a pas été créé par rapport au répertoire racine du projet, vous pouvez mettre le patch dans le même répertoire que le fichier à corriger et exécuter la commande patch sans l'option -p comme ceci :
patch < file.patch
Le patch détecte généralement le format automatiquement. Vous pouvez également utiliser l'option de ligne de commande -u pour indiquer un correctif unifié et l'option -b pour créer une copie de sauvegarde du fichier avant de le modifier. En cas de problème, vous pourrez alors facilement restaurer le fichier de sauvegarde.
Inverser un Patch
On peut inverser un patch, si par exemple le patch ne fonctionne pas ou qu'on souhaite en tester un autre.
Pour inverser un patch on utilise la commande patch avec l'option -R. (Si le patch a été appliqué avec l'option -p0 remplacez -p1 par -p0)
patch -p1 -R < path/file.patch
Ou cette commande avec Git :
git apply -R path/file.patch