Как получить несколько коммитов с REST Api с локального сервера TFS 2018? - PullRequest
0 голосов
/ 12 января 2019

Рассмотрим API GetCommits . Он имеет необязательный параметр searchCriteria.ids, который представляет собой список идентификаторов коммитов.

Но как пройти этот список? Например, у меня есть 2 коммита A и B. Я попробовал:

  1. A, B
  2. A B
  3. [A, B]

Ответ, который я получаю:

An object ID must be 40 characters long and only have hex digits. Passed in object ID: 0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c

Я получаю одинаковый ответ для всех трех вариантов - отличается только идентификатор объекта, о котором сообщается.

Итак, как передать массив в REST Api Azure Devops в GET-запросе?

Я использую PowerShell. Утверждение просто Invoke-RestMethod -UseDefaultCredentials -Uri $Url

Вариант 1 - используйте запятую

http://tfsserver:8080/tfs/defaultcollection/code/_apis/git/repositories/xyz/commits?api-version=4.1&searchCriteria.ids=0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c0

Результаты в

{"$id":"1","innerException":null,"message":"An object ID must be 40 characters long and only have hex digits. Passed in object ID: 0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c0.","typeName":"System.ArgumentException, mscorlib","typeKey":"ArgumentException","errorCode":0,"eventId":0}

Вариант 2 - использовать пробел

http://tfsserver:8080/tfs/defaultcollection/code/_apis/git/repositories/xyz/commits?api-version=4.1&searchCriteria.ids=0533232917cc37fb743d282c467eb41bafac15ee%20063a6805640221285db15f75c3b3ca6f3fe619c0

Результат с той же ошибкой.

Вариант 3 - использовать массив JavaScript [,]

http://tfsserver:8080/tfs/defaultcollection/code/_apis/git/repositories/xyz/commits?api-version=4.1&searchCriteria.ids=[0533232917cc37fb743d282c467eb41bafac15ee,063a6805640221285db15f75c3b3ca6f3fe619c0]

Та же ошибка.

Это работает, когда я просто передаю один коммит без каких-либо дополнительных символов.

enter image description here

Использование в вместо =

Есть предложение использовать «in» вместо «=». Это принимает запятую, но, похоже, не работает правильно. Пожалуйста, соблюдайте:

enter image description here

Итак, использование '=' дает один коммит - как и ожидалось. Но использование «в» дает 100? Я попытался передать два коммита, разделенных запятой, и это не дает сбоя, но также возвращает 100 коммитов. Это неправильно.

1 Ответ

0 голосов
/ 14 января 2019

На основании моего теста запятая работает для остальных API. Ниже приведен демонстрационный пример и результат теста с кодом Powershell. Вы можете обратиться к нему. Я тестирую его с помощью API Azure Devops.

Если между идентификаторами есть пробел, я также могу воспроизвести проблему, о которой вы упоминали.

$pat = "PATToken"
$organization = "organization name"
$project = "project Id"
$repositoryId = "repository Id"
$ids = "266295d9adbxxx,f345970123bxxxx" # Ids of commits
$apiUrl= "https://dev.azure.com/$organization/$project/_apis/git/repositories/$repositoryId/commits?searchCriteria.ids=$ids&api-version=5.0-preview.1"

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", $pat)))

$Result = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}  -Method GET 

foreach($item in $Result.value)
{
  Write-Host "$item"
  Write-Host "---------------"
}

Примечание: Я также пытаюсь протестировать его с API версии 4.1, он также работает на моей стороне.

Результат теста:

enter image description here

Обновление

Если я использую TFS API, я также могу воспроизвести проблему, о которой вы упоминали, с кодом, который я упомянул.

Я могу получить результат следующим образом. Пожалуйста, попробуйте использовать в вместо "="

Вот мой тестовый код:

$ids = '0cc4e954c082372379xxxx','9b5983436c2f81b5fae6a72xxx'

$apiUrl= "http://$tfsserver:8080/tfs/$organization/$project/_apis/git/repositories/$repositoryId/commits?searchCriteria.ids in $ids&api-version=4.1"

Результат теста:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...