Bitbucket Server API: получение необработанных файлов, связанных с запросом на вытягивание

Ситуация: для репозитория, размещенного на сервере Bitbucket, у меня есть настройка веб-перехватчика для отправки запроса на внешний сервер всякий раз, когда открывается запрос на вытягивание. Затем сервер использует API-интерфейс Bitbucket Server для получения различий всех файлов, связанных с pr. Это прекрасно работает, потому что учетная запись сервера имеет доступ для чтения к репозиторию с настройкой веб-перехватчика. Далее я хотел бы получить необработанные файлы, связанные с запросом на вытягивание.

Проблема: в случае, когда другой пользователь разветвляет этот репозиторий, вносит изменения и отправляет pr, мой сервер не имеет доступа для чтения к этому пользовательскому форку репозитория и, следовательно, к файлам в их измененных государство.

Я просмотрел документацию Bitbucket Server, но не могу найти никакого способа получить необработанные файлы, кроме как просто прочитать из репозитория пользователей. Это отлично работает, когда pr находится в какой-то ветке в основном репо для master в том же репо, поскольку проблема с правами на чтение не вступает в игру.

Я думаю, что одним из возможных решений является использование diff вместе с файлами, находящимися в настоящее время в основном репо, для воссоздания измененного состояния файлов, но я хотел бы избежать этого.

Есть ли способ сделать это, не отправляя каждому пользователю pr, чтобы предоставить доступ для чтения к учетной записи сервера?

Спасибо


person Kutz    schedule 21.12.2018    source источник


Ответы (1)


Это точно нигде не задокументировано, но как только запрос на включение открывается, BitBucket создает несколько ссылок, связанных с запросом на вытягивание. Возможно, вас заинтересуют следующие два.

  1. refs/pull-requests/[PR_ID]/from — исходная ветвь пользователя
  2. refs/pull-requests/[PR_ID]/merge – исходная ветка пользователей объединена с целевой веткой.

Таким образом, вы можете проверить любой из них (в зависимости от того, что вы хотите), что даст вам все файлы (измененные и другие), используя refspec.

i.e.

+refs/pull-requests/[PR_ID]/*:refs/remotes/origin/pull-requests/[PR_ID]/*

Затем вы можете получить пути измененных файлов, используя PR Changes REST API и получить файлы, используя эти пути, с диска (где бы вы ни извлекались).

Однако стоит отметить, что Команда BitBucket предупреждает, что эти реализации предназначены только для внутреннего использования и могут быть изменены без предупреждения. Но реализация не изменилась за 6 лет.

Ссылка

person Dilip Raj Baral    schedule 21.12.2018
comment
@Kutz Также обратите внимание, что если запрос на вытягивание обновлен, ссылки не будут автоматически обновляться, если вы не откроете страницу запроса на вытягивание в BitBucket или не вызовете PR Changes API. - person Dilip Raj Baral; 23.12.2018