Связывание запросов на вытягивание с рабочими элементами из базы данных TFS

Мы используем пользовательские запросы (к базам данных TFS: Tfs_DefaultCollection и Tfs_Warehouse), чтобы проверить, все ли наборы изменений имеют связанный с ним рабочий элемент. Мы используем таблицу FactWorkItemChangeset из базы данных Tfs_Warehouse. В настоящее время мы переходим на TFS Git и хотим обновить наши пользовательские запросы, чтобы проверить, все ли запросы на вытягивание связаны с рабочим элементом. Например:
Git pull request и его рабочий элементМы не знаем, где в Tfs_Warehouse или в База данных Tfs_Defaultcollection запрос на вытягивание связан с рабочим элементом. Кто-нибудь знает, где хранится эта ссылка?


person Anne Salomons    schedule 29.10.2018    source источник


Ответы (2)


Не удается найти связанную таблицу, однако вы можете использовать REST API, чтобы проверить, все ли запросы на вытягивание связаны с рабочим элементом. См. Получить запросы на вытягивание по проектам и Рабочие элементы запроса на вытягивание — Список для получения подробной информации.

Например, приведенный ниже сценарий PowerShell извлечет все запросы на слияние из определенного проекта и перечислит связанные рабочие элементы для каждого из них, а также выведет запросы на слияние, у которых нет связанных рабочих элементов, в файл *.csv ("D:\temp\1030.csv" в приведенном ниже примере).

Param(
   [string]$collectionurl = "http://172.17.16.163:8080/tfs/DefaultCollection", 
   [string]$project = "GitTest",
   [string]$user = "Domain\user",
   [string]$token = "password"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

#Get pull request list for a specific project
$prsurl = "$collectionurl/$project/_apis/git/pullrequests?api-version=2.0"
$prs = (Invoke-RestMethod -Uri $prsurl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$prurls = $prs.value.url

#Get the associated work items to PRs
Clear-Host

foreach ($prurl in $prurls)
{
$baseurl = "$prurl/workitems"

$prwis = Invoke-RestMethod -Uri $baseurl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

write-host "Pull Reuquest:" $prurl

write-host "Count of Associated Work Items:"$prwis.count 
 foreach ($prwi in $prwis.value )
  {
   Write-Host "Associated workitem:"$prwi.id - $prwi.url
  }
  write-host `n

if ($prwis.count -lt 1)
 {
  #Write-host $prurl
  # Output the Pull Requests which have no work items associated:
  $prurl | Add-Content "D:\temp\1030.csv"  
 }
}

введите здесь описание изображения

person Andy Li-MSFT    schedule 30.10.2018
comment
Привет Энди, Спасибо за ваш ответ! То, что мы искали, — это ссылка в базе данных tfs_defaultcollection. Но с помощью API и профайлера сервера sql мы, наконец, нашли ответ: связь между workitem и pull request хранится в таблице [WorkItemFiles] в базе данных tfs_Default! - person Anne Salomons; 30.10.2018

Наконец-то мы нашли ссылку в Tfs_DefaultCollection.WorkItemFiles! Например: выберите * из [dbo].[WorkItemFiles], где FilePath = 'vstfs:///Git/PullRequestId/4f39e226-6f44-4e56-a216-f45969d8147d%2fab3368e0-56ef-468f-8e14-43065c433a21%2f2619'

Это дает следующий результат: ID 427787 FilePath vstfs:///Git/PullRequestId/4f39e226-6f44-4e56-a216-f45969d8147d%2fab3368e0-56ef-468f-8e14-43065c433a21%2f2619

Столбец ID содержит идентификатор рабочего элемента и хэши FilePath 2 (разделенные «%ef») и, наконец, идентификатор запроса на вытягивание. В этом примере рабочий элемент 427787 связан с запросом на вытягивание 2619.

person Anne Salomons    schedule 30.10.2018