OpenGrok

от автора

Такие проекты как AOSP (Android open source project) или LLVM, содержат в себе примерно 2.5 и 11 миллионов строчек кода соответственно. Встроенный в IDE поиск или grep недостаточно эффективны при работе с такими большими кодовыми базами, не говоря уже о поиске в GitLab или GitHub.

Тем кто работают с Linux Kernel хорошо известен сервис bootlin.com. Именно этого – практически мгновенного структурированного поиска по сложной кодовой базе, не хватает многим открытым и «закрытым» – приватным проектам.

Именно для таких случаев многие крупные копании озаботились разработкой собственных инструментов для индексации и поиска, например Code Search от Google.
На мой взгляд лучшим решением из тех, что есть в открытом доступе является OpenGrok от Oracle.

Давайте рассмотрим как можно уменьшить порог вхождения в проекты со сложной кодовой базой, на простом примере. Для этого нам понадобится OpenGrok, Docker и vcstool.

OpenGrok

OpenGrok прекрасно работает в Docker-контейнерах, поэтому нам не придется долго возится с установкой:

docker run --rm -d \     --name opengrok \     -p 8080:8080/tcp \ -e SYNC_PERIOD_MINUTES="10" \ -v ~/opengrok-src/:/opengrok/src/ \     -v ~/opengrok-etc/:/opengrok/etc/ \     -v ~/opengrok-data/:/opengrok/data/ \     opengrok/docker:latest 

Через несколько минут после запуска веб-интерфейс OpenGrok станет доступен на 8080 порту:

http://IP_ADDRESS:8080 

Перед тем как начать работать с поиском, нужно будет предоставить OpenGrok исходники одного или нескольких проектов.
Vcstool – это «обертка» для нескольких SCM инструментов (git, mercurial, subversion, bazaar), которая облегчает работу с несколькими репозиториями.

Установка vcstool:

yum install python3-pip sudo pip3 install -U vcstool 

Сначала создадим простой манифест со списком необходимых репозиториев:

- git:     local-name: taskflow     uri: https://github.com/taskflow/taskflow.git     version: master - git:     local-name: renode     uri: https://github.com/renode/renode.git     version: master - git:     local-name: cartographer     uri: https://github.com/googlecartographer/cartographer.git     version: master - git:     local-name: pigweed     uri: https://github.com/google/pigweed.git     version: main - git:     local-name: jetson-inference     uri: https://github.com/dusty-nv/jetson-inference.git     version: master - git:    local-name: jetson-containers    uri: https://github.com/dusty-nv/jetson-containers.git    version: master 

Затем используем vcstool для синхронизации:

vcs-import --input repos.yml ~/opengrok-src/ 

Через несколько минут после перезапуска контейнера OpenGrok, проекты станут доступными в веб-интерфейсе.

docker stop opengrok && docker rm opengrok docker run --rm -d \     --name opengrok \     -p 8080:8080/tcp \ -e SYNC_PERIOD_MINUTES="10" \ -v ~/opengrok-src/:/opengrok/src/ \     -v ~/opengrok-etc/:/opengrok/etc/ \     -v ~/opengrok-data/:/opengrok/data/ \     opengrok/docker:latest 
OpenGrok

OpenGrok


ссылка на оригинал статьи https://habr.com/ru/articles/812707/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *