Appliquer un fichier .patch pour tester le correctif d'une fonctionnalité Joomla

Imprimer
PDF

L'objectif de ce tutoriel est de vous expliquer comment manipuler un fichier ".patch" (différent d'un Patch correctif d'une version Joomla qui consiste, lui, en un ZIP installable) afin de pouvoir participer au debuggage du projet Joomla, notamment lors de sessions de tests et debug comme les évènements "Pizza Bugs and Fun".

 

1) Fonctionnement du Bugtracker de Joomla

C'est l'espace qui liste les fiches d'anomalie de Joomla. Il est accessible publiquement en lecture, mais vous devrez vous acquitter d'une création de compte sur Joomlacode.org (très simple !) pour poster vos éléments de réponse dans le Bugtracker.

Plusieurs Bugtrackers sont disponibles, celui qui nous intéresse pour la correction de bug Joomla est nommé "Joomla! CMS Issue Tracker" :

http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&tracker_id=8103

 

2) Cycle de vie d'une fiche d'anomalie

Une fiche d'anomalie n'est pas réservé uniquement à l'attention des développeurs, bien au contraire. La participation de nombreux testeurs est nécessaire pour valider son cycle de vie.

Vous remarquerez qu'une colonne du Bugtracker contient les statuts des fiches d'anomalies et qu'il est possible de filtrer selon le statut souhaité (choisir un "status" + cliquer sur [Browse] ).

Voici le cycle théorique des statuts des fiches d'anomalie :

  1. un bug vient d'etre découvert, la fiche est créé et passée en statut "OPEN"
  2. une fois le bug réellement validé par des testeurs, le statut est passé en "CONFIRMED"
  3. un ou des développeurs vont alors tenter de résoudre le bug en proposant le fameux "patch". Une fois que le patch semble correct, la fiche passe en statut "PENDING" (en attente de vérification)
  4. il faut alors qu'au moins 2 testeurs valident par un test réel que le patch corrige bien le bug. pour cela il télécharge le patch, l'applique sur le Joomla (dont la version est précisé dans la fiche) et tente de reproduire le bug. Si le bug est résolue, alors il peuvent poster une réponse sur la fiche d'anomalie, comme par exemple :
    Thank you, this patch works fine ! @test               (traduction : Merci, ce patch fonctionne bien ! @test)
    (merci d'écrire en anglais et de ne pas oublier de rajouter le mot "@test" qui est utilisé par un outil de statistiques interne a l'équipe Joomla.)
    Si par contre le patch ne corrige pas le bug, veuillez répondre sur la fiche en expliquant comment vous avez procédé et quel est le résultat (toujours en anglais, merci)
  5. si le patch est valide (c'est à dire, confirmé par les tests d'au mois 2 testeurs), alors le statut sera passé en "READY TO COMMIT"
  6. Dés qu'un administrateur ajoute ce correctif dans les sources officiels de Joomla, le statut passe en "FIXED IN SVN/GITHUB"
  7. Elle est finalement fermée pour cloturer la fiche et passe en statut " CLOSED" (notez qu'un bug peut être fermé a différent moment, notamment si il n'est pas confirmé (étape 2))

A la lecture de ce cycle, vous comprendrez que pour un testeur qui veut donner un coup de main, il peut être intéressant de filtrer les fiches selon les statuts "OPEN" (pour aider a confirmer le bug ... ou pas !) ou "PENDING" (pour tester un patch correctif et communiquer son retour sur l'état de correction du bug avec ce patch) !

 

3) C'est quoi un fichier .patch et à quoi cela sert-il ?

C'est un fichier au format texte qui précise toutes les différences entre 2 versions d'un même script de code source (PHP, JS ...) afin de pouvoir appliquer des corrections codées par un développeur.

Un fichier .patch ressemble à cet exemple :

Index: libraries/joomla/form/rules/email.php
===================================================================
--- libraries/joomla/form/rules/email.php    (revision 18591)
+++ libraries/joomla/form/rules/email.php    (working copy)
@@ -26,7 +26,7 @@
-    protected $regex = '[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}';
+    protected $regex = '^[\w.-]+(\+[\w.-]+)*@\w+[\w.-]*?\.\w{2,4}$';
 
Index: media/system/js/validate.js
===================================================================
--- media/system/js/validate.js    (revision 18591)
+++ media/system/js/validate.js    (working copy)
@@ -44,7 +44,7 @@
 
             function (value) {
-                regex=/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
+                regex=/^[a-zA-Z0-9._-]+(\+[a-zA-Z0-9._-]+)*@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
                 return regex.test(value);
             }

Ce présent patch précise qu'un développeur a apporté des corrections sur 2 scripts (email.php et validate.js)

Les signes "-" (moins) et "+" (plus) en début de ligne, précisent si la ligne de code doit être supprimée ou ajoutée lors de l'application de ce patch.

les lignes "-" correspondent généralement a l'ancienne version qui doit être remplacée par la nouvelle version du code ("+").

 

4) Appliquer un fichier .patch

4.1) installer le programme patch.exe sous Windows

Contrairement à Linux et MacOS, Windows n'a pas de programme de patchs natif, il est donc nécessaire d'installer un petit executable additionnel :

  1. Installez le programme patch.exe disponible ici : http://gnuwin32.sourceforge.net/downlinks/patch.php
  2. Ouvrez une console Windows (ou saisissez "cmd" dans la zone de saisie "Executer" du menu démarrer)
  3. Vérifiez que la commande patch existe bien : tapez "patch" dans la console, si elle répond que la commande n'existe pas, suivez les instructions plus bas
  4. Placez-vous dans le dossier où se trouve l'installation de Joomla avec la commande "cd" suivie du chemin du dossier d'installation
  5. Dans la fiche de l'anomalie du Bugtracker, récupérez le ou les fichiers .patch en bas dans l'onglet "Files" (en prenant soin de lire les commentaires d ela fiche pour ne récupérer que les patchs valides !). Copiez les fichiers .patch à la racine de votre joomla (via l'explorateur Windows)
  6. Tapez la commande patch -p0 < fichier_patch.patch (en remplacant fichier_patch.patch par le nom du ficher patch)
  7. Vérifiez que vos fichiers ciblés par le patch ont bien été modifié.

    Une fois que vous aurez installé votre premier patch, vous n'aurez plus qu'à suivre les étapes 2 et 4 à 7 pour en appliquer d'autres.

 

Si la commande patch ne fonctionne pas après installation
  1. Faites un clic droit sur le Poste de travail (Windows 2000/XP) ou Ordinateur (Windows Vista/Seven)
  2. Cliquez sur Propriétés
    • Sous Windows 2000/XP :
      1. Ouvrez l'onglet avancé
      2. Cliquez sur le bouton variables d'environnement
      3. Ajoutez une variable utilisateur :
        • Nom : PATH
        • Valeur : %PATH%;C:\Program Files\GnuWin32\bin (modifies le chemin en fonction de l'endroit où tu as installé le port)
    • Sous Vista/Seven :
      1. Allez dans la rubrique Propriétés système avancées
      2. Cliquez sur le bouton variables d'environnement
      3. Ajoutez une variable utilisateur :
        • Nom : PATH
        • Valeur : %PATH%;C:\Program Files\GnuWin32\bin (modifies le chemin en fonction de l'endroit où a été installer patch.exe)
    • Retournez au paragraphe 4.1 pour effectuer les étapes 3 à 7, plus haut, de l'installation de patch.exe

 

4.2) Utilisation du programme patch sous Linux et MacOS

Le programme "patch" étant natif sur ces systèmes, il vous suffit d'effectuer les étapes 4 à 7 précédentes pour appliquer un patch sur vos codes sources Joomla !

 

4.3) explications sur l'application d'un fichier .patch

Avant de vous lancer sur des patchs consistants comme ceux que vous pourrez trouver sur le Bugtracker de Joomla, voici un tutoriel pour vous faire la main.

Attention : pour les utilisateurs sous Windows, il vous faut installer le complément de patch.exe qui s'appelle Diff (qui est natif sous Linux et MacOS). Il permet de calculer les différences entre 2 fichiers. Il n'est pas nécessaire pour vos tests sur le Bugtracker de Joomla, mais ce présent tutoriel l'utilise afin de bien vous faire comprendre la philosophie des fichiers .patch.
Vous devez télécharger et simplement installer le programme suivant : http://gnuwin32.sourceforge.net/downlinks/diffutils.php

A) Nous allons commencer par créer 2 fichiers textes (à la racine de votre Joomla) qui seront en fait 2 versions différentes d'un meme texte.

Dans le 1er fichier que nous nommerons version1.txt, saisissez :

AA
BB
DD
EE
FF

 (le mot CC est absent, c'est volontaire !)

 

Dans le second fichier que nous nommerons version2.txt, saisissez :

AA
BB
CC
DD
FF
(le mot EE a été supprimé, c'est aussi volontaire !)

 

B) Depuis la console, nous allons lancer une analyse de différence sur ces 2 fichiers avec la commande suivante :

    diff version1.txt version2.txt

Le resultat doit être :
2a3
> CC
4d4
< EE
(la ligne numéro 3 a été ajoutée (a comme append), la ligne numéro 4 a été supprimée (d comme delete))

 

C) Ensuite, nous allons générer un fichier update1to2.patch pour l'appliquer par la suite :

    diff -u version1.txt version2.txt > update1to2.patch

En ouvrant le fichier update1to2.patch dans un editeur de texte, vous devrez retrouver le contenu similaire au résultat de l'execution du 1er Diff.

 

D) Enfin pour appliquer le fichier patch sur notre fichier version1.txt, nous allons executer la commande patch :

       patch -p0 < update1to2.patch
       
L'argument -p{nb} indique de tronquer {nb} répertoires dans les noms de fichiers affectés par le patch.
Cela peut-être pratique quand un patch s'applique à une aborescence qui n'est pas la même que la votre.

Si le contenu du fichier patch a été généré par un autre développeur, vous pourrez trouver en haut dans le fichier .patch :

    /users/afuj/package/joomla/version1.txt

En général, compter jusqu’à un pour chaque séparateur de chemin (barre oblique) que vous supprimez à partir du début du chemin, jusqu’à ce que ce que le chemin qui reste existe dans votre répertoire de travail. Le nombre atteint est le niveau p.

Si vous souhaitez appliquer le patch en vous positionnement directement dans la console dans votre dossier /Joomla3test, utilisez :
    patch -p5 < update1to2.patch       (avec -p5, je fais abstraction de  /users/afuj/package/joomla/, soit 5 slashes !)

Vérifiez le contenu de votre fichier version1.txt, il doit être "patché", bravo !

 

Article librement inspiré de : http://wootook.org/board/index.php?topic=1285.0

et de http://www.tux-planet.fr/utilisation-des-commandes-diff-et-patch-sous-linux/

ImHuman

Dernières versions

Dernière version stable :
Télécharger Joomla 3.x

Ce site fait partie du...

Guides pour débuter

Joomla 3

joomla-3-pour-tous-le-livre
Consultation en ligne gratuite !

Joomla 2.5

j25fr-cover
Consultation en ligne gratuite !

Rechercher dans le site

Le nom Joomla!® est utilisé sous license limitée de Open Source Matters, le propriétaire mondial de la marque de commerce.
Joomla.fr n'est ni affilié à Open Source Matters ou au projet Joomla!® ni approuvé par eux.