Leçon 7 / 20

Automatiser le verdict de bisect

15 min Git — flux d’équipe et récupération Gratuit

Objectif : Faire exécuter à bisect un contrôle qui retourne un verdict exploitable.

Lors d’une recherche de régression, tester chaque révision à la main prend du temps et rend les résultats difficiles à reproduire. Vous pouvez automatiser le verdict : Git lance un contrôle sur chaque commit intermédiaire et utilise son code de sortie pour poursuivre la recherche.

La leçon précédente vous a permis de définir un critère binaire reproductible et d’encadrer la régression entre une révision saine et une révision défectueuse. Vous allez maintenant fournir ce critère sous la forme d’un script que Git peut exécuter sans intervention pendant la recherche.

Traduire le critère en contrôle automatisé

Dans l’exemple du dépôt du site, le contrôle vérifie que le titre principal attendu figure dans index.html. Ce test n’exige ni serveur web ni dépendance Python externe : il lit le fichier présent dans la révision testée et compare le texte trouvé à une valeur connue. Si votre défaut porte sur un autre élément, remplacez ce critère par celui que vous avez déjà défini, sans changer la règle des codes de sortie.

Créer le contrôle temporaireTexte
#!/usr/bin/env python3
from pathlib import Path
import re
import sys

page = Path("index.html")
if not page.is_file():
    print("Contrôle impossible : index.html est absent.", file=sys.stderr)
    sys.exit(125)

contenu = page.read_text(encoding="utf-8")
correspondance = re.search(r"<h1\b[^>]*>(.*?)</h1>", contenu, re.IGNORECASE | re.DOTALL)
if correspondance is None:
    print("Titre principal absent : révision défectueuse.")
    sys.exit(1)

titre = re.sub(r"<[^>]+>", "", correspondance.group(1)).strip()
attendu = "Structurer le dépôt d’un site devenu produit"
if titre == attendu:
    print("Contrôle réussi : titre principal conforme.")
    sys.exit(0)

print(f"Contrôle échoué : titre trouvé = {titre!r}")
sys.exit(1)

Enregistrez ce fichier hors du dépôt, par exemple dans /tmp/verifier-page.py. Il n’altère donc ni index.html, ni style.css, ni la documentation ou les conventions suivies par l’équipe. L’appel explicite à python3 suffit pour l’exécuter ; rendez toutefois l’interpréteur disponible et assurez-vous que votre terminal se trouve à la racine du dépôt.

Comprendre les codes de sortie

git bisect run interprète le résultat du programme, pas seulement les messages qu’il affiche. Un code de sortie 0 signifie que la révision est bonne ; un code de sortie 1 à 127 (sauf 125) la marque comme mauvaise. Le code 125 indique que la révision ne peut pas être testée : Git la saute et continue, ce qui est utile, par exemple, si un fichier indispensable au contrôle manque dans cette révision.

Lancer la recherche automatisée

Après avoir commencé la session et indiqué les bornes saine et défectueuse comme dans la leçon précédente, passez le script à git bisect run. L’exemple ci-dessous montre la séquence complète : remplacez les deux références indicatives par les commits réellement vérifiés dans votre dépôt. Le nom de la branche est celui de l’état courant avant le démarrage de la recherche.

Démarrer et terminer une session automatiséeTerminal
git bisect start
 git bisect bad <commit-defectueux>
 git bisect good <commit-sain>
 git bisect run python3 /tmp/verifier-page.py
 git bisect reset
Résultat attendu
Pendant l’exécution, Git affiche les révisions testées et les messages du script. À la fin, Git identifie le premier commit considéré comme mauvais. `git bisect reset` met fin à la session et replace HEAD sur la branche courante d’avant la recherche.

Supprimez les espaces placés avant les commandes de l’exemple si vous les copiez dans un terminal : chaque commande doit être saisie à sa propre invite. La commande run exécute le programme pour chaque commit proposé ; le script lit chaque fois les fichiers de la révision que Git a extraite. N’effectuez pas de modification manuelle du dépôt pendant cette phase, car le contrôle doit porter sur la révision courante et non sur un état local modifié.

Rendre le verdict répétable

Un verdict automatisé n’est fiable que si les mêmes entrées produisent le même résultat à chaque exécution. Utilisez la même version de Python, les mêmes dépendances et les mêmes commandes sur votre poste ou dans un environnement isolé. Ici, Python 3 et sa bibliothèque standard suffisent ; le script ne consulte ni le réseau, ni des fichiers extérieurs au dépôt autres que son propre emplacement temporaire.

Avant de lancer toute la recherche, testez le script manuellement sur une révision connue saine et sur une révision connue défectueuse. Vérifiez à la fois le message et le code de sortie avec echo $? dans un shell compatible : le premier doit renvoyer 0, le second 1. Cette vérification évite de demander à Git d’automatiser un critère mal câblé ou toujours positif.

À retenir

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.