Показывать индекс вместе с отфильтрованными результатами в стандартный вывод - PullRequest
0 голосов
/ 22 декабря 2019

У меня есть скрипт, который ищет в 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
...

Или что-то подобное, так что я знаю, какие индексы созданы, какие совпадают)

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