【问题标题】:Linking pull requests to the workitems from the TFS database将拉取请求链接到 TFS 数据库中的工作项
【发布时间】:2019-04-02 05:59:03
【问题描述】:

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

【问题讨论】:

    标签: sql-server tfs tfs-2015 pull-request


    【解决方案1】:

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

    例如,下面的 PowerShell 脚本将检索来自特定项目的所有 Pull Requests 并列出每个项目的链接工作项,还将没有链接工作项的 Pull Requests 输出到*.csv 文件(@987654326 @ 在下面的示例中)。

    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"  
     }
    }
    

    【讨论】:

    • 嗨,安迪,感谢您的回答!我们正在寻找的是 de tfs_defaultcollection 数据库中的链接。但是通过 api 和 sql server profiler 我们终于找到了答案:工作项和拉取请求之间的链接存储在 tfs_Default 数据库的 [WorkItemFiles] 表中!
    【解决方案2】:

    我们终于在 de Tfs_DefaultCollection.WorkItemFiles 中找到了链接!例如:选择 * 来自 [dbo].[WorkItemFiles] 其中 FilePath = 'vstfs:///Git/PullRequestId/4f39e226-6f44-4e56-a216-f45969d8147d%2fab3368e0-56ef-468f-8e14-43065c433a21%2f2619'

    这会产生以下结果: 编号 427787 FilePath vstfs:///Git/PullRequestId/4f39e226-6f44-4e56-a216-f45969d8147d%2fab3368e0-56ef-468f-8e14-43065c433a21%2f2619

    ID 列包含工作项 ID 和 FilePath 2 哈希(由“%ef”分隔),最后是拉取请求 ID。在此示例中,工作项 427787 链接到拉取请求 2619。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2018-07-17
      相关资源
      最近更新 更多