Как полнотекстовый индекс репозитория Mercurial?

Что делать когда hg log -k не достаточно, и hg grep просто слишком медленно (около 100 тыс. наборов изменений)? У нас очень плохой опыт с Fisheye (слишком медленный), и Килн, кажется, слишком сильно привязывает нас к империи FogCreek.

Какие есть еще варианты для обеспечения полнотекстового поиска по хранилищу?

2 ответа

Вы смотрели на RhodeCode? - http://demo.rhodecode.org/

Что вы ищете в полнотекстовом поиске? Если вы хотите узнать ревизию, когда текст был добавлен, это проще, и если вы хотите знать все ревизии, в которых есть текст, это больше.

В общем-то hg grep это так же быстро, как вы собираетесь без предварительной сборки индекса или, по крайней мере, предварительной сборки версионных файлов, на которых вы можете использовать традиционный grep.

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

hg export -o 'changeset-%r-%h.patch --rev 0:tip

Это будет экспортировать каждый набор изменений в текстовый файл, подходящий для поиска с использованием обычного командной строки grep или индексирования с использованием lucene или аналогичного. Вы можете легко сохранить этот ток с changeset крюк.

Наличие только diff-файлов changset позволяет вам искать ревизии, где текст был добавлен или удален, но не список всех ревизий, где этот текст существовал. Для этого вы можете предварительно создать копию каждого файла в каждой ревизии, но это много места, даже если это легко автоматизировать.

Другой вариант, если вы ищете конкретную ревизию, где что-то произошло, это убедиться, что вы знакомы с hg bisect, Он автоматизирует бинарный поиск для вас, поэтому, если вы хотите найти первую ревизию со строкой CHEESE Вы могли бы сделать что-то вроде:

hg bisect --command "grep -s CHEESE" # might need to reverse the exit code of grep -s

хотя это обновляет ваш рабочий каталог, который hg grep не делает.

Другие вопросы по тегам