Ewen Corre

2024-11-22

TIL #4 - Mixins, branches et tests avec git

Mixins et héritage

Dans Python (et surtout Django ici), l'ordre et la façon d'hériter des classes sont importantes.

class First():
    def __init__(self):
        print("First")

class Second():
    def __init__(self):
        print("Second")

class Tutu(First, Second):
    def __init__(self):
        super().__init__()
        print("tutu")

Tutu()

Ce code donne :

First
tutu

L'__init__() de Second() est passé à la trappe.

J'ai pas encore de solution pour prendre en compte tous les __init__(). Pour creuser, c'est lié à la method resolution order (MRO).


Git : supprimer les branches locales qui ont été supprimées sur le serveur (remote)

  1. on nettoie les références qui n'existent plus en remote : git fetch -p
  2. on peut regarder les branches supprimées : git branch -v (où [gone] symbolise les branches supprimées en remote)
  3. filtrer ces branches : git for-each-ref --format '%(refname:short) %(upstream:track)' | awk '$2 == "[gone]" {print $1}'
  4. on pipe ça avec xargs : git for-each-ref --format '%(refname:short) %(upstream:track)' | awk '$2 == "[gone]" {print $1}' | xargs -r git branch -D

Et on peut en faire un alias git :

[alias]
  gone = ! "git fetch -p && git for-each-ref --format '%(refname:short) %(upstream:track)' | awk '$2 == \"[gone]\" {print $1}'"
  gonedel = ! "git fetch -p && git for-each-ref --format '%(refname:short) %(upstream:track)' | awk '$2 == \"[gone]\" {print $1}' | xargs -r git branch -D"

Voilà !

Source


Git : pour vérifier que tous les commits passent des tests

Deux choix :

  • avec git rebase -i master -x 'pytest tests'
  • avec git bisect, ici ça permet d'isoler le commit qui introduit une erreur, le cas échéant)

Git : afficher le nombre de délétions et additions

Pour équilibrer les commits, on peut vouloir regarder le nombre de lignes ajoutées et supprimées. Et hop :

git log --shortstat