С удовольствием делюсь новостью, которая, надеюсь, порадует некоторых читателей Хабра: в Bitbucket Server вот-вот появится возможность поиска по коду. Буквально на днях вышел релиз по программе раннего доступа (EAP).

Начну с вольного перевода обращения менеджера продукта, опубликованного в блоге Atlassian:


Как часто это случалось с вами: вы видите сообщение об ошибке, но не знаете, в какой части кода она происходит, или вам известно название функции, но не репозиторий, в коде которого она определена. Многие из вас просили добавить в Bitbucket Server поиск по коду, и я рад сообщить, что ваше ожидание подошло к концу. Сегодня мы приглашаем наших пользователей опробовать поиск по коду в Bitbucket Server через программу раннего доступа (EAP). Теперь вы можете искать и находить нужный код с помощью строки поиска:

Строка поиска



Как это работает?



Мы понимаем, что у многих команд огромное количество кода. Поэтому мы сделали так, чтобы можно было легко ограничить результаты поиска конкретным проектом или репозиторием с помощью поисковых фильтров. Кроме того, можно искать код на заданном языке (например, lang:java) или в файлах с определённым расширением (например, ext:css).

Поисковые фильтры

Операторы AND, OR и NOT помогут уточнить запрос, они полезны для дальнейшей фильтрации результатов поиска в случае, когда их слишком много.

Логические операторы

Что делать, чтобы начать пользоваться?



Рад, что вы спросили! Здесь вы можете скачать дистрибутив Bitbucket Server EAP с поддержкой поиска по коду, а с запуском и настройкой должна помочь подготовленная нами пошаговая инструкция. Мы будем признательны, если вы расскажете о своих впечатлениях от EAP дистрибутива, — ваши отзывы крайне важны для нас. Заполнив эту короткую и простую анкету, вы поможете нам улучшить поиск для вас и других пользователей Bitbucket к его официальному релизу.

Мы работаем над тем, чтобы в скором времени порадовать вас бóльшими возможностями. Удачного поиска!

Стив Кинг

TL;DR


В кратком пересказе, инструкция по установке сводится к следующим шагам:


  1. Установить Git и Perl (про установку Git подробнее тут)
  2. Скачать нужный дистрибутив со страницы EAP
  3. Запустить установщик (в случае использования ZIP-дистрибутива перед запуском Bitbucket Server придётся вручную выполнить ещё несколько предварительных шагов)
  4. Пройти процедуру установки и дождаться запуска Bitbucket Server
  5. ???
  6. PROFIT!!!

Как устроен поиск?


Как можно было заметить по страницам справки и содержимому дистрибутива, для хранения индекса, с помощью которого осуществляетя поиск, используется Elasticsearch. Он, в свою очередь, основан на известной библиотеке Apache Lucene.


Elasticsearch

В Bitbucket Server поиск обеспечивают два модуля: первый занимается индексацией репозиториев, второй обслуживает поисковые запросы от пользователей. Индексация происходит постоянно в фоновом режиме. Если вы обновляете Bitbucket Server, который уже содержит какое-то количество репозиториев, первоначальная индексация может занять некоторое время, однако как только он�� завершится, последующие изменения обрабатываются очень быстро. Стоит отметить, что поиск доступен сразу, но пока идёт индексация, его результаты могут быть неполными. Кроме того, с целью оптимизации производительности введена небольшая задержка между моментом изменения репозитория (например, коммит нового кода) и моментом, когда это изменение отражается в результатах поиска. По умолчанию, эта задержка может достигать 15 секунд.

Процедура установки, по сравнению с предыдущими версиями Bitbucket Server, не изменилась: все конфигурационные действия, необходимые для работы поиска, выполняются автоматически. В то же время, необязательно использовать встроенный экземпляр Elasticsearch: при желании, можно настроить требуемую конфигурацию самостоятельно.




Что именно можно искать?


Поиск имеет ряд ограничений:


  • Индексируются только файлы основной ветки (в большинстве репозиториев таковой является master, хотя это не правило)
  • Индексируются текстовые файлы меньше 512 Кб
  • Не поддерживается поиск по маске (например, qu?ck buil*)
  • Не поддерживается поиск по регулярным выражениям
  • Все пунктуационные знаки из запроса удаляются
  • Поиск регистронезависимый
  • В запросе не может быть больше десяти выражений — сочетаний термов и операторов
  • Максимальная длина запроса ограничена 250 символами

Поисковый запрос должен содержать, по крайней мере, один терм, который может быть словом или заключённой в кавычки фразой.



Операторы


Операторы могут быть добавлены в запрос, чтобы уточнить поиск. Вот их текущий список:


Оператор Пример запроса Значение
AND bitbucket AND server Соответствует файлам, содержащим оба слова "bitbucket" и "server"
OR bitbucket OR server Соответствует файлам, содержащим хотя бы одно из слов "bitbucket" или "server"
NOT bitbucket NOT jira Соответствует файлам, содержащим слово "bitbucket", но не содержащим слово "jira"
- bitbucket -jira Используется перед термом; соответствует файлам, содержащим слово "bitbucket", но не содержащим слово "jira"
( ) bitbucket AND (server OR cloud) Соответствует файлам, содержащим слово "bitbucket" и любое из слов "server" или "cloud"

Запрос может содержать несколько термов, и по умолчанию, они неявно объединяются с помощью логического оператора AND. То есть, запрос bitbucket server эквивалентен запросу bitbucket AND server.



Модификаторы


Модификаторы помогают ограничить область поиска. Они записываются в формате модификатор:значение. Если в запросе содержится несколько модификаторов, они неявно объединяются с помощью оператора AND и применяются ко всему выражению. На данный момент поддержаны следующие модификаторы:


  • repo: или repository:<ключ_репозитория> — поиск в определённом репозитории. Требует наличия модификатора proj:, идентифицирующего проект. Например, найти файлы в репозитории "bitbucket" проекта "atlassian", которые содержат слово "jira", можно любым из следующих поисковых запросов:


    • jira repo:bitbucket proj:atlassian
    • jira repository:bitbucket project:atlassian
    • jira repo:atlassian/bitbucket

  • proj: или project:<ключ_проекта/ключ_репозитория> — поиск во всех репозиториях определённого проекта. Например, найти файлы в проекте "atlassian", содержащие слово "jira", можно с помощью любого из таких поисковых запросов:
    • jira proj:atlassian
    • jira project:atlassian

Модификаторы расширения и языка файла


Поиск может быть ограничен языками и расширениями файлов. Для некоторых языков эти два критерия идентичны: например, модификаторы lang:clojure и ext:clj приведут к одинаковому результату. Однако есть и такие языки, которым соответствуют несколько расширений файлов: например, расширения .hs и .lhs используются в Haskell, и файлы с любым из этих расширений будут включены в результаты поиска с модификатором lang:haskell.


  • lang: или language:<язык> — поиск файлов на определённом языке. Язык соответствует набору расширений. Например, следующие запросы найдут файлы в формате LaTeX (то есть, имеющие расширение .ltx, .tex или .text), содержащие слово "jira":


    • jira lang:latex
    • jira language:latex

  • ext: или extension:<расширение_файла> — поиск файлов с определённым расширением. Например, найти файлы, содержащие слово "jira" и имеющие расширение .lhs, можно с помощью любого из этих запросов:
    • jira ext:lhs
    • jira extension:lhs



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



Для меня эта новость особенно приятна и важна потому, что я принимаю непосредственное участие в разработке поиска. Буду рад ответить на любые вопросы и комментарии.