Подтвердить что ты не робот

Как git -diff генерирует описания hunk?

(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.

  • Как git генерирует эти описания?
  • Как я могу настроить их, чтобы показать имя метода, к которому применяется патч?
4b9b3361

Ответ 1

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

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

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

Изменить. Встроенное регулярное выражение python, по-видимому, определено в userdiff.c (строка 53), хотя мое regex-fu недостаточно хорош, чтобы реально понять, что он делает...

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