Как git-diff генерирует описания блоков? - PullRequest
14 голосов
/ 06 мая 2010

(git версия 1.6.5.7)

Когда я запускаю git diff, вывод имеет хороший подсказку для области видимости после номеров строк для моих скриптов Python, например:

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

Обратите внимание, что за номерами строк следуют TITF: Test Infrastructure Tags Format и class Tags( object ):. Первый патч применяется к области действия модуля, а описание TITF: Test Infrastructure Tags Format является описанием модуля. Второй патч применяется к методу класса Tags.

  1. Как git генерирует эти описания?
  2. Как настроить их так, чтобы они отображали имя метода, к которому применяется патч?

1 Ответ

15 голосов
/ 06 мая 2010

Git использует регулярное выражение, чтобы найти подходящую строку для заголовков блоков. Python встроен, но вы должны быть в состоянии определить свое собственное выражение в вашем ~ / .gitconfig:

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

Подробнее об этом здесь .

Редактировать : встроенное регулярное выражение Python, похоже, определено в userdiff.c (строка 53), хотя мое регулярное выражение недостаточно хорошо, чтобы действительно понять, что именно это делает ...

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]+"),
         /* -- */
...