Как стать автором
Обновить

OpenGrok

Время на прочтение2 мин
Количество просмотров2.4K

Такие проекты как 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
Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0+6
Комментарии2

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань