У меня есть скрипт, который ищет в git-репозиториях текст как команду sh, которую я могу передать другим пользовательским методам поиска. По идее он похож на git log -S
, но гораздо более расширяем и все же довольно быстр.
Вот скрипт WIP
#!/usr/bin/env sh
ROOT=`git rev-parse --show-toplevel`
# Explanation:
#
# Git uses pack (*.idx) files to compress older commits. One line reads this
# file and uncompresses it to get the original git indices.
#
# The second command reads the more recent git indices, as-is.
#
find $ROOT/.git/objects/pack -name "*.idx" | xargs -I{} sh -c 'git show-index < "{}"' | awk '{print $2}' | git -C $ROOT cat-file --batch
find $ROOT/.git/objects/ -type f | grep -v '/pack/\|/info/packs$' | awk -F'/' '{print $(NF-1)$NF}' | git -C $ROOT cat-file --batch
Поэтому, чтобы использовать его, вы должны сохранить его в файлнапример, git-searcher
и затем git-searcher | grep -a "def get_foo"
, чтобы получить все функции, начинающиеся с "get_foo". Или вы можете выполнять более сложные запросы, такие как «получить мне URL-адреса, содержащие в своем имени как« http », так и« foo »
git-searcher | sed -e '/http/!d -e '/foo/!d'
Вот мой вопрос.
Я хотел бы изменить этот скрипт, чтобы он отображал индексы результатов поиска вместе с отфильтрованным контентом. Возможно ли это сделать, сохраняя при этом быстрый запрос? Я использую это в очень большом репозитории git, поэтому скорость важна.
В идеале я хотел бы, чтобы такой вызов
git-searcher | grep -a "foo"
выводил текст, например
ff7c1dfa2447eae0c3d51b8ddea3e4a6ff32acf
def __init__(self):
def __call__(self, match):
ff7e497f3b1884e2934e37914da497f2ece9c7a9
...
Или что-то подобное, так что я знаю, какие индексы созданы, какие совпадают)