2010-05-06 7 views
12

(version git 1.6.5.7)Comment git-diff génère-t-il des descriptions de morceaux?

Quand je lance git diff la sortie a une belle indication de portée après les numéros de ligne pour mes scripts Python, par exemple:

diff --git a/file.py b/file.py 
index 024f5bb..c3b5c56 100644 
--- a/file.py 
+++ b/file.py 
@@ -14,6 +14,8 @@ TITF: Test Infrastructure Tags Format 
... 
@@ -1507,13 +1533,16 @@ class Tags(object): 
... 

Notez que les numéros de ligne sont suivis TITF: Test Infrastructure Tags Format et class Tags(object):. Le premier patch s'applique à la portée du module et la description TITF: Test Infrastructure Tags Format est la description du module. Le deuxième correctif s'applique à une méthode de la classe Tags.

  1. Comment git génère-t-il ces descriptions?
  2. Comment puis-je les modifier pour afficher le nom de méthode auquel le correctif s'applique?

Répondre

13

Git utilise une expression régulière pour trouver une ligne appropriée pour les en-têtes de gros morceaux. construit en Python est, mais vous devriez être en mesure de définir votre propre expression dans votre ~/.gitconfig:

[diff "python"] 
     xfuncname = "<regex goes here>" 

En savoir plus sur cette here.

Modifier: Le regex python intégré semble être défini dans userdiff.c (ligne 53), bien que mon regex-fu est pas assez bon pour comprendre en fait exactement ce qu'il fait ...

PATTERNS("python", "^[ \t]*((class|def)[ \t].*)$", 
     /* -- */ 
     "[a-zA-Z_][a-zA-Z0-9_]*" 
     "|[-+0-9.e]+[jJlL]?|0[xX]?[0-9a-fA-F]+[lL]?" 
     "|[-+*/<>%&^|=!]=|//=?|<<=?|>>=?|\\*\\*=?" 
     "|[^[:space:]|[\x80-\xff]+"), 
     /* -- */ 
+0

Intéressant "* .py diff = python" change le comportement pour être comme je voudrais même sans définir un [diff "python"] personnalisé, mais "* .py + diff" (apparemment mon défaut) se comporte comme indiqué dans ma question . – RobM

+1

"* .py diff = python" dit à git d'utiliser les options définies sous [diff "python"] (ou la valeur par défaut prédéfinie), "* .py + diff" permet simplement un diff textuel. Ce commutateur est généralement utilisé pour désactiver les différences pour les fichiers qui ne sont pas toujours détectés comme binaires, par ex. "* .ps -diff" traitera les fichiers PostScript comme binaires et n'affiche donc pas de diff. – DataWraith

+0

Bien que pour les fichiers binaires, il peut être conseillé de définir "* .ps binary" qui est un alias pour "-crlf -diff", c'est-à-dire qu'il désactive aussi le traitement CRLF <-> pour le fichier. – araqnid

Questions connexes