Appliquer un patch

Vous avez ouvert un ticket au service support et celui-ci vous a fourni un patch ou un lien vers un patch? Voici la procédure simple pour l'appliquer !

Procédure simplifiée (Grande majorité des cas)

Placer le patch au bon endroit

Selon ou se situe le bug rencontré, le patch peut-être à destination du cœur ou d'un plugin. Il est donc nécessaire de placer le patch au bon endroit avant de l'appliquer.


Le patch concerne le cœur de GLPI

  • Un fichier vous a été fourni: Déplacez le fichier précédemment créé vers le dossier racine de GLPI.

  • Un lien vous a été fourni: Se déplacer vers le dossier racine de glpi puis lancer la commande suivante afin de télécharger le patch:

    • wget https://xxx/bug-fix.diff

  • Vérifier ensuite que le fichier est bien présent:

Alt text

Le patch concerne un Plugin

  • Un fichier vous a été fourni: Déplacez le fichier précédemment créé vers le dossier du plugin.

  • Un lien vous a été fourni: Se déplacer vers le dossier du plugin puis lancer la commande suivante afin de télécharger le patch:

    • wget https://xxx/bug-fix.diff

  • Vérifier ensuite que le fichier est bien présent:

Alt text

Tester le patch

Avant d'appliquer le patch, vous devez le tester avec cette commande et le paramètre --dry-run

grep -v "phpunit/" buf-fix.diff | patch -p1 --dry-run

Votre système vous indique que la commande patch est inconnue ? cliquer-ici

Le test échoue ❌

En cas d'erreur vous devriez avoir ceci

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

Beaucoup de choses peuvent mener à l'échec :

  • Votre version de GLPI est différente de la version utilisée pour faire le patch

  • Le fichier qui doit être modifié par le patch a déjà été précédemment

Le test réussi ✅

En cas de succès vous devriez avoir ceci

patching file inc/config.class.php

ou ceci

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).

Appliquer le patch

Le test est réussi ✅ ? Vous pouvez maintenant appliquer réellement le patch avec cette commande

grep -v "phpunit/" buf-fix.diff | patch -p1

Félicitations le patch est appliqué !


Cas particuliers (rares)

Annuler un patch

Pour annuler un patch, entrez la commande :

patch -p1 < bug-fix.diff -R

Vous avez un numéro de commit

Le service support vous donne ce numéro de commit ex : adc9876

  • D'abord, vous devez récupérer les changements du commit

  • Allez à https://github.com/glpi-project/glpi/commit/ + NUMERO_COMMIT

  • Puis, transformez le commit en patch en ajoutant .diff à la fin de l'url.

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

Alt text
  • Copiez l'URL du patch et exécutez un wget sur votre serveur GLPI wget https://github.com/glpi-project/glpi/commit/adc9876.diff

Info

Si c'est un patch du cœur de GLPI, effectuez le wget directement à la racine de GLPI.

Si c'est un patch de plugin, effectuez le wget directement dans le dossier du plugin concerné. Enfin, allez à la section appliquer le patch

Vous avez un numéro PR (Pull Request)

Le service support vous donne un numéro PR 4770

  • D'abord, vous devez récupérer la PR

  • Allez à https://github.com/glpi-project/glpi/pull/ + NUMERO_PR

  • D'abord, transformez la PR en patch en ajoutant .diff à la fin de l'url.

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

Alt text
  • Copiez l'URL du patch et exécutez un wget sur votre serveur GLPI wget https://github.com/glpi-project/glpi/pull/4770.diff

Info

Si c'est un patch du cœur de GLPI, effectuez le wget directement à la racine de GLPI.

Si c'est un patch de plugin, effectuez le wget directement dans le dossier du plugin concerné. Enfin, allez à la section appliquer le patch

Enfin, allez à la section appliquer le patch


Vérifier que le binaire patch est installé

  • Dans de rares cas, il se peut que votre installation de Linux ne soit pas pourvue de la commande patch. Pour savoir s'il est installé, trouvez simplement la version du binaire patch installé

patch -v

S'il est installé vous devriez avoir ceci

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 devriez avoir ceci

command not found: patch
  • Installez-le avec cette commande

Ubuntu/Debian

apt-get install patch

CentOS/RHEL

yum install patch

Mis à jour