Такие проекты как 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
ссылка на оригинал статьи https://habr.com/ru/articles/812707/
Добавить комментарий