Parse git - файл журнала с питоном

1

Поэтому мне нужно разбирать такие вещи:

commit e397a6e988c05d6fd87ae904303ec0e17f4d79a2
Author: Name <[email protected]>
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 прав, но почему-то, когда я читаю файл я и пытаюсь его разобрать, я получаю весь файл как имя, а затем последнюю вставку и удаление, поэтому он совпадает со всем файлом, но не с одним фиксатором... [. +] получает весь файл, но не входит в коммит...

Теги:
git-log

3 ответа

3
Лучший ответ

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

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

Производит вывод формы:

Имя автора

lines_inserted lines_deleted modified_file

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

  • 0
    тогда вам придется каждый раз запускать команду log для каждого нужного вам типа информации.
3

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

0

Поэтому ответ на мой вопрос:

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню