LINUX.ORG.RU

Сгенерировать список файлов для каждого коммита

 ,


0

1
while read commit ; do
    while read path ; do
        echo "$commit:$path"
    done < <( git diff-tree --no-commit-id --name-only "$commit" -r )
done < <( git log --format=format:%H)

Возможно ли то же самое сделать быстрее? Не порождая отдельный git diff-tree на каждый коммит. Для репозитория на 25 тысяч коммитов операция выполняется достаточно долго. Минут 20-30, навскидку.

Ответ на: комментарий от firkax

Мне нужно в БД загнать идентификаторы коммитов, в которых были правки файлов, соответствующих некоторой маске. Так что да, это просто общий список коммитов.

wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

Поближе: git log --all --compact-summary

Но опции чтобы просканировать все коммиты, вне зависимости от наличия до них дорожки от одной из живых веток, не нашёл.

А вообще задача не очень понятна. Надо оптимизировать время? Зачем и почему ты считаешь что это возможно? Может сканирование всех коммитов гитовскими алгоритмами и правда долгое, и запуск процессов тут ни при чём.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Может сканирование всех коммитов гитовскими алгоритмами

Может.

А вообще задача не очень понятна. Надо оптимизировать время?

Если бы эта операция выполнялась достаточно быстро, я бы просто пересканировал весь реп целиком после каждого апдейта. А так, придётся как-то выкручиваться с оптимизациями и частичными ресканами.

wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

Если бы эта операция выполнялась достаточно быстро, я бы просто пересканировал весь реп целиком после каждого апдейта.

Ну это явно что-то ужасное, 25000х кратная лишняя работа. И опять непонятно зачем. Пересканировать ничего не надо, надо только добавленные коммиты сканировать (разово и больше не трогать никогда).

выкручиваться с оптимизациями и частичными ресканами.

И процитированный ярлык тут совершенно неприемлем. Это не «выкручиваться» а очевидное прямолинейное решение задачи.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Ну это явно что-то ужасное, 25000х кратная лишняя работа.

Если это упрощает алгоритм и делает его более прямолинейным, то не имею ничего против.

Пересканировать ничего не надо, надо только добавленные коммиты сканировать (разово и больше не трогать никогда).

Да, видимо, будет как-то так:

для всех коммитов {
  если коммита нет в БД {
    обработать список файлов и поместить в БД
  }
}
wandrien ★★
() автор топика
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Если это упрощает алгоритм и делает его более прямолинейным, то не имею ничего против.

Любимая идеология веб-пхп-жс-кодеров, творящих непотребства. Крайне осуждаю.

Какой ярлык?

Слово «выкручиваться» для околоэталонной реализации.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Крайне осуждаю.

Крайне осуждаю преждевременные оптимизации. Алгоритм должен быть настолько простым и дешевым, насколько возможно.

Это при том, что оптимизации как работу над кодом я люблю и получаю за это деньги.

wandrien ★★
() автор топика