Получите последние 10 веток или все ветки с помощью Rest API от BitBucket - PullRequest
3 голосов
/ 06 мая 2020

Я использую BitBucket Rest API, чтобы получить branches. В настоящее время происходит то, что он возвращает 10 веток, но они не последние, они смешанные. Я использую пакет soft / bitbucket-api для выполнения запросов. Вот как выглядит мой код:

$branchesObject = new Branches();
$branchesObject->getClient()->setApiVersion('2.0')->addListener(new OAuthListener($this->oauthParams));

$contentJson = $branchesObject->all('<account>', '<repo>')->getContent();
$contentArray = json_decode($contentJson, true);
$branches = array_column($contentArray['values'], 'name');

Если я dd($branches) Вот как выглядит результат:

array:10 [
  0 => "branch1"
  1 => "branch2"
  2 => "branch3"
  3 => "branch4"
  4 => "branch5"
  5 => "branch6"
  6 => "branch7"
  7 => "branch8"
  8 => "branch9"
  9 => "branch10"
]

Это не последние 10 веток. Версия API - 2.0. Могу ли я получить последние 10 веток или все активные ветки?

1 Ответ

2 голосов
/ 25 мая 2020

Короче говоря, не похоже, что существует какой-либо простой способ получить эти конкретные данные (последние ветки).

Сделать это самостоятельно

Первое, о чем следует подумать, - это то, есть ли этот тип данных может быть извлечен вообще.

В git ветка - это просто метка, указывающая на фиксацию в репозитории. В git lin go это ref, как и tag s. A branch в некотором роде отличается от tag, одним из которых является то, что ветвь всегда обновляется, чтобы указывать на последнюю фиксацию, пока указанная ветка проверена (вы находитесь в этой ветке).

Сами ветки имеют только фиксацию ha sh и не имеют других свойств, таких как дата создания или время последнего обновления. Чтобы увидеть это, попробуйте просмотреть файлы в каталоге файловой системы .git из репозитория; они находятся в ./git/refs/heads/.

Сказав это, есть несколько способов угадать, когда ветвь была впервые создана, как описано в Как определить, когда была создана Git ветка? , но это выходит за рамки API Bitbucket publi c.

Выполнение этого через API

Я предлагаю вам сделать несколько прямых запросов API с помощью curl или Postman, в чтобы понять, какие данные доступны. Если посмотреть на фактический API, а не на оболочку, которую вы используете, кажется, что конечная точка, которую вы используете, - /{workspace}/{repo_slug}/refs/branches/. Кажется, это возвращает вам все активные ветки, с 10 результатами на страницу, в том порядке, в котором их возвращает git, и без какого-либо очевидного способа запросить отсортированный набор. Чтобы разбить его, есть

  • активных веток - похоже, совпадают с данными, которые вы хотите;
  • 10 на страницу - это означает, что вам придется делать больше запросов пока вы не получите их все; в теле ответа должно быть свойство next, содержащее URL следующего набора результатов;
  • нет очевидного способа для API их отсортировать - это означает, что вам нужно выполнить некоторую обработку твой конец. Как только вы получите данные, вы можете копнуть глубже и найти даты, а затем отсортировать их по своему усмотрению.

Другой способ

Предыдущий метод будет выполнять запросы каждый раз, когда программа запущен. Если вам нужно что-то более близкое к реальному времени, вы можете настроить веб-перехватчик для срабатывания при каждой фиксации. Веб-перехватчик - это просто программа, которая запускается при запросе URL-адреса; вы подключаете его к некоторым другим событиям запуска системы. Как только фиксация нажата, вызывается веб-перехватчик с информацией о фиксации, например датой, ветвью. Затем вы можете сохранить их, например, { "branch1": "1590406741", "branch2": "1590406441"}.

Bitbucket webhooks


Подводя итог, есть несколько способов добиться этого, но вы будете нужно сделать дополнительное кодирование.

...