Запрос содержимого файла репозитория из GitLab

#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 )»