Я пытаюсь построить "тепловую карту" из многолетней истории, хранящейся в репозитории git, где единица гранулярности - это отдельные функции. Функции должны становиться более горячими, поскольку они меняются чаще, чаще и с большим количеством непустых строк.
В начале я рассмотрел вывод
git log --patch -M --find-renames --find-copies-harder --function-context -- *.c
Я посмотрел на использование Language.C из Hackage, но, похоже, он хочет, чтобы полная единица перевода, расширенные заголовки и все, а не возможность чтобы справиться с исходным фрагментом.
Опция --function-context
новая с версии 1.7.8. Основой реализации в v1.7.9.4 является регулярное выражение:
PATTERNS("cpp",
/* Jump targets or access declarations */
"!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:.*$\n"
/* C/++ functions/methods at top level */
"^([A-Za-z_][A-Za-z_0-9]*([ \t*]+[A-Za-z_][A-Za-z_0-9]*([ \t]*::[ \t]*[^[:space:]]+)?){1,}[ \t]*\\([^;]*)$\n"
/* compound type at top level */
"^((struct|class|enum)[^;]*)$",
/* -- */
"[a-zA-Z_][a-zA-Z0-9_]*"
"|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
"|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
Это, по-видимому, хорошо распознает границы, но doesn & rsquo; t всегда оставляет эту функцию первой линией diff-hunk, например, с директивами #include
в верхней части или с помощью hunk, который содержит множество определений функций. Возможность сказать diff для выделения отдельных блоков для каждой измененной функции была бы действительно полезной.
Это не критично, так что я могу терпеть некоторые промахи. Означает ли это, что у меня, вероятно, есть Zawinski & rsquo; s "две проблемы" ?