У меня есть приложение, которое порождает процесс, чтобы найти вхождения определенного регулярного выражения в определенной фиксации в репозитории git, выполнив:
git grep -G pattern revision
Это работает просто отлично, но проблема в том, что я делаю это в цикле, и это очень медленно. Я профилировал код в Linux, и один только вызов __libc_fork
занимает 94% времени выполнения.
Очевидно, я хотел бы избежать этих ненужных накладных расходов. Для выполнения некоторых других операций с git я уже использую libgit2 в своем приложении, но я не вижу удобного способа выполнять поиск по регулярному выражению, как с git grep
. Я могу представить вручную просмотр всех файлов, связанных с фиксацией, и выполнение поиска, но я надеялся на более элегантное решение, до нескольких строк.
Мне не хватает соответствующего API libgit2? Кто-нибудь знает быстрый способ поиска шаблона с помощью libgit2?
EDIT Просто для уточнения: в моем цикле ревизия фиксируется, но меняется шаблон.
git log -S pattern
или создать небольшой сценарий оболочки, который будет выходить из1
или0
в зависимости от того, нашел ли он то, что вы ищете, а затем использоватьgit bisect
с этим сценарием. - person Carlos Campderrós   schedule 27.04.2016git grep
кажется подходящим инструментом для работы. Мне просто нужен более быстрый эквивалентlibgit2
, но я не хочу писать его с нуля. - person Dimitar Asenov   schedule 27.04.2016