2010-05-06 18 views
12

(git versione 1.6.5.7)In che modo git-diff genera descrizioni di hunk?

Quando eseguo git diff l'uscita ha un buon suggerimento ambito dopo i numeri di riga per il mio script Python, ad esempio:

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

Si noti che i numeri di riga sono seguiti da TITF: Test Infrastructure Tags Format e class Tags(object):. La prima patch si applica all'ambito del modulo e la descrizione TITF: Test Infrastructure Tags Format è la descrizione del modulo. La seconda patch si applica a un metodo della classe Tags.

  1. In che modo git genera queste descrizioni?
  2. Come posso modificarli per mostrare il nome del metodo a cui si applica la patch?

risposta

13

Git utilizza un'espressione regolare per trovare una riga adatta per le intestazioni di hunk. Python è built-in, ma si dovrebbe essere in grado di definire la propria espressione nel tuo ~/.gitconfig:

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

Ulteriori su questi here.

Edit: l'espressione regolare python built-in sembra essere definita in userdiff.c (linea 53), anche se il mio regex-fu non è sufficiente per capire in realtà esattamente ciò che fa ...

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

È interessante notare che "* .py diff = python" cambia il comportamento per essere come vorrei anche senza definire un [diff "python" personalizzato, ma "* .py + diff" (apparentemente il mio default) si comporta come mostrato nella mia domanda . – RobM

+1

"* .py diff = python" dice a git di usare le opzioni definite in [diff "python"] (o il predefinito predefinito), "* .py + diff" abilita appena un diff testuale. Questo interruttore viene solitamente utilizzato per disabilitare i diff per i file che non sono sempre rilevati come binari, ad es. "* .ps -diff" considera i file PostScript come binari e quindi non mostra una diff. – DataWraith

+0

sebbene per i file binari potrebbe essere consigliabile impostare "* .ps binary" che è un alias per "-crlf -diff", cioè disabilita l'elaborazione LF CRLF <-> per il file. – araqnid

Problemi correlati