Aller au contenu

Appliquer un patch#

Un fichier patch vous a été fourni#

Le Service support vous a fourni un fichier de patch dont l'extension peut être .patch ou .diff

Exemple : bug-fix.diff

  • Aller directement à la section Appliquer un patch pour tester et appliquer votre patch.

Vous avez un numéro de commit#

Le Service support vous a fourni un numéro de commit ex: adc9876

Il faut alors en premier lieu retrouver les modifications apportées par ce commit.

  • Se rendre à l'adresse https://github.com/glpi-project/glpi/commit/ + COMMIT_NUMBER

Exemple

https://github.com/glpi-project/glpi/commit/adc9876

Alt text

  • Puis transformer le commit en patch en ajoutant l'extension .diff à la fin de l'URL.

Comme ceci: https://github.com/glpi-project/glpi/commit/adc9876.diff

Alt text

  • Copier l'URL du patch puis effectuer un wget sur votre serveur GLPI wget https://github.com/glpi-project/glpi/commit/adc9876.diff

Info

Si c'est un patch core, effectuez le wget directement à la racine de GLPI
Si c'est un patch plugin, effectuez le wgetdirectement dans le dossier du plugin concerné.
Si vous l'avez effectué ailleurs, la section appliquer un patch vous orientera pour le déplacer là au bon endroit.

Rendez-vous dans la section appliquer un patch

Vous avez un numéro de PR (Pull Request)#

Le Service support vous a transmis un numéro de PR, par exemple 4770

  • Il vous faut en premier lieu retrouver la PR
  • Se rendre à l'adresse https://github.com/glpi-project/glpi/pull/ + PR_NUMBER

Exemple

https://github.com/glpi-project/glpi/pull/4770 Alt text

  • Transformer la PR en patch en ajoutant l'extension .diff à la fin de l'URL

Comme ceci : https://github.com/glpi-project/glpi/pull/4770.diff

Alt text

  • Copier l'URL du patch puis effectuer un wget sur votre serveur GLPI wget https://github.com/glpi-project/glpi/pull/4770.diff

Info

Si c'est un patch core, effectuez le wget directement à la racine de GLPI. Si c'est un patch plugin, effectuez le wgetdirectement dans le dossier du plugin concerné. Si vous l'avez effectué ailleurs, la section Appliquer un patch vous orientera pour le déplacer là au bon endroit.

Rendez-vous dans la section Appliquer un patch

Appliquer un patch#

Patcher GLPI#

  • Collez le patch dans le dossier racine de GLPI.

Alt text

  • Allez dans le dossier racine de GLPI :

cd /var/www/glpi/(1)

  1. 🙋‍♂️A adapter au besoin

Patcher un plugin#

  • Collez le patch dans le dossier racine du plugin (il peut être dans le dossier Plugin ou Marketplace):

Alt text

  • Allez dans le dossier racine du plugin :

cd /var/www/glpi/plugins/XXXX/(1)

  1. 🙋‍♂️A adapter au besoin

Vérifier que patch est installé sur le serveur#

Pour savoir si le binaire patch est bien installé sur le serveur, tapez la commande suivante :

patch -v

S'il est installé, vous devriez avoir cela :

GNU patch 2.7.6
Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
Copyright (C) 1988 Larry Wall

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Larry Wall and Paul Eggert
Sinon vous aurez ceci :

command not found: patch
  • Installer alors le binaire avec cette commande :

Ubuntu/debian

apt-get install patch

CentOS/RHEL

yum install patch

Tester le patch avant de l'Appliquer#

  • Avant d'Appliquer un patch, il est nécessaire de tester que tout va bien se passer :
patch -p1 --dry-run < bug-fix.diff

Le test est OK ✅#

Si tout s'est bien passé, vous devriez avoir ce retour :

patching file inc/config.class.php

Ou celui-ci :

patching file inc/config.class.php
Hunk #1 succeeded at 891 with fuzz 1 (offset 23 lines).
Hunk #2 succeeded at 1301 with fuzz 2 (offset 41 lines).
  • Vous pouvez maintenant appliquer le patch pour de bon avec la commande :
patch -p1 < bug-fix.diff

Félicitations, le patch est bien appliqué !

Maintenant il vous reste à tester que la correction apportée convient et nous faire un retour.

Le test est KO ❌#

Dans le cas d'une erreur, vous verrez ce retour :

patching file inc/config.class.php
Hunk #1 FAILED at 400.
1 out of 1 hunk FAILED -- saving rejects to file inc/config.class.php.rej

Plusieurs causes peuvent être à l'origine de cette erreur :

  • Votre version de GLPI est différente de celle utilisée pour faire le patch
  • Le fichier modifié par le patch a déjà été modifié auparavant

Annuler un patch#

Afin d'annuler un patch entrez la commande :

patch -p1 < bug-fix.diff -R