将拉取请求链接到TFS数据库中的工作项

时间:2018-10-29 10:11:34

标签: sql-server tfs tfs2015 pull-request tfs2018

我们使用自定义查询(针对TFS数据库:Tfs_DefaultCollection和Tfs_Warehouse)来检查所有变更集是否都链接有工作项。我们使用Tfs_Warehouse数据库中的FactWorkItemChangeset表。 当前,我们正在迁移到TFS Git,并且我们想更新我们的自定义查询,以检查所有拉取请求是否都链接有一个工作项。 例如:
Git拉取请求及其工作项 我们不知道将拉取请求链接到工作项在Tfs_Warehouse或Tfs_Defaultcollection数据库中的何处。有谁知道此链接的存储位置?

2 个答案:

答案 0 :(得分:0)

找不到相关的表,但是您可以使用REST API来检查所有拉取请求是否都链接有一个工作项。有关详细信息,请参见Get Pull Requests By ProjectPull Request Work Items - List

例如,下面的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"  
 }
}

enter image description here

答案 1 :(得分:0)

我们终于在de 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列包含工作项ID和FilePath 2哈希(由'%ef'分隔),最后是拉取请求ID。在此示例中,工作项427787链接到拉取请求2619。