#sql #gitlab #invantive-sql
# #sql #gitlab #invantive-sql
Вопрос:
Я хочу получить идентификатор фиксации файла readmeTest.txt
с помощью Invantive SQL следующим образом:
select * from repository_files(29, file-path, 'master')
Но для этого мне нужны a project-id
file-path
и a ref
.
Я знаю свой project-id
(я получил его от select * from projects
) и мой ref
( master
филиал), но я не знаю, где я могу найти путь к файлу, о котором я хочу получить информацию.
Итак, где я могу найти значение file-path
и ref
?
Это дерево каталогов моего репозитория, где я вижу, что файлы существуют:
Ответ №1:
Вам нужно объединить несколько объектов в GitLab, чтобы получить необходимую информацию.
Поля из вашей repository_files
табличной функции и их значение:
project-id
можно найти какid
вprojects
сущности, как вы уже знали;ref-name
можно найти какname
вrepositories
;ref
это имя ветки, тега или коммита, поэтому давайте предположим, что вы хотитеmaster
сейчас.
Предоставляя эту информацию, вам нужен приведенный ниже запрос, чтобы получить все файлы репозитория и их содержимое в проекте (на данный момент я сузил его до одного проекта):
select pjt.name project_name
, rpe.name repository_name
, rpf.content file
from projects pjt
join repositories(pjt.id) rpe
on 1=1
and rpe.name like '%.%'
join repository_files(pjt.id, rpe.name, 'master') rpf
on 1=1
where pjt.id = 1
Комментарии:
1. Если я использую идентификатор проекта, который не существует, я получаю 3 пустых поля, как и ожидалось, но если я использую pjt.id из существующего проекта я получаю исключение с надписью «Дерево 404 не найдено (gitlaburl.com/api/v3/projects/30/repository/tree )»