Parse git - файл журнала с питоном - PullRequest
2 голосов
/ 13 июля 2011

Так что мне нужно разобрать что-то вроде этого:

commit e397a6e988c05d6fd87ae904303ec0e17f4d79a2
Author: Name <email@email.com>
Date:   Sat Jul 9 21:29:10 2011 +0400

    commit message

 1 files changed, 21 insertions(+), 11 deletions(-)

и получите имя автора и количество вставок и удалений.

Для имени у меня есть это:

re.findall(r"Author: (.+) <",gitLog)

Для чисел у меня есть это:

re.findall(r" (\d+) insertions\S+, (\d+) deletions",gitLog)

Но я хочу получить список кортежей имен, вставок и делений с одним регулярным выражением.

Я пытался сделать что-то вроде

re.findall(r"Author: (.+) <.+ (\d+) insertions\S+, (\d+) deletions",gitLog,re.DOTALL)

но ничего не возвращает ...

Так в чем же моя ошибка? Как должно выглядеть регулярное выражение?

UPADTE: wRAR прав, но каким-то образом, когда я читаю свой файл и пытаюсь его проанализировать, я получаю весь файл как имя, а затем последнюю вставку и удаление, так что он соответствует всему файлу, но не одному коммиту ... [. +] получает весь файл, но не часть коммита ...

Ответы [ 3 ]

3 голосов
/ 13 июля 2011

Вы должны использовать (напрямую или заимствуя код) существующие пакеты, такие как GitPython , но по вашему вопросу о регулярном выражении приведенное регулярное выражение для предоставленного текста возвращает [('Name', '21', '11')], поэтому я полагаю, что это правильно.

3 голосов
/ 13 июля 2011

Если у вас есть доступ к репозиторию, а не к некоторому текстовому дампу git log, избавьте себя от проблемы разбора и сгенерируйте другой вывод журнала:

git log --pretty="%an" --numstat

Создает вывод в форме:

Имя автора

lines_inserted lines_deletedified_file

Для которого вам даже не нужно регулярное выражение.Если вы хотите сохранить регулярное выражение, вам нужно сопоставить (+) после вставок, иначе оно не будет совпадать вообще и не захватит числа.

0 голосов
/ 14 июля 2011

Итак, ответ на мой вопрос:

re.findall(r"Author: (\S+) <.+\n.+\n\n.+\n\n.+ (\d+) insertions\S+, (\d+) deletions",gitLog)

Но все равно спасибо за ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...