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