为什么用于获取TFVC变更集的TFS Rest API仅返回256个项目。我尝试使用$ Top获得超过256个结果。但没用。
获取Git存储库提交的API工作正常。
我指的是https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/changesets
示例请求 ?https://tfs.domain.com/tfs/defaultcollection/projectname/_apis/tfvc/changesets $ searchCriteria.fromDate = 2016-07-12T17:49:01&安培; $跳过= 0&安培; $顶部= 500
我试过没有$ skip和$ searchcriteria.fromdate。请帮助我了解如何获得所有结果。
答案 0 :(得分:4)
我设法解决了这个奇怪的逻辑(谢谢MSFT你摇滚的人:/)。 在我的情况下,我想获得所有变更集。
1)你需要获得前256个变更集(我在响应中使用了orderby以便顺序):
<projectName>/_apis/tfvc/changesets?$top=256&orderby=id desc&searchCriteria.itemPath=<your_path>&api-version=1.0
2)如果您有超过0个项目作为响应从响应中获取changesetNumber的最后一个值。如果为0 - 您获得了所有变更集。
3)从changesetNumber开始接下来的256个项目:
<projectName>/_apis/tfvc/changesets?searchCriteria.toId=<changesetNumber>&$top=256&orderby=id desc&searchCriteria.itemPath=<your_path>&api-version=1.0
你需要跳过第一个变更集(你已经有了这个值)作为回应。
4)转到第2步
因此,您需要使用searchCriteria.fromDate将createdsetId替换为createdDate,将searchCriteria.toId替换为searchCriteria.toId。 我希望我的解决方案可以帮到你。
P.S。我无法在连接网站上找到任何反馈。
答案 1 :(得分:0)
根据上面的@Vitaly评论,我在posh here中实现了解决方案。还提取了下面的脚本:
function Get-MaxChangeset($Project, $LastChngset)
{
$projectUri = "$rootTfsUri/$($Project.name)/_apis/tfvc/changesets?api-version=3.1&`$top=256&orderby=id desc"
$lastchangeset = $LastChngset
if($lastchangeset -ne $null){
$projectUri += "&searchCriteria.toId=$($lastchangeset.changesetId)"
}
$nestedsubresponse = Invoke-WebRequest -Uri $projectUri -UseDefaultCredentials -Method Get -Verbose -UseBasicParsing
$nestedsubresponseObject = $nestedsubresponse.Content | ConvertFrom-Json
if($nestedsubresponseObject.count -ge 1)
{
# exclude false positives.
$lastchangeset = $nestedsubresponseObject.value | `
where-object {
($_.checkedInBy.displayName -notlike "*Project Collection Service Accounts*") } | `
Sort-Object changesetId -Descending | Select-Object -First 1
if( ($lastchangeset -eq $null) -and ($nestedsubresponseObject.count -ge 256) )
{
# More records to search. Pick the bottom from current list and send it back for next batch api call.
$lastchangeset = $nestedsubresponseObject.value | Sort-Object changesetId | Select-Object -First 1
$lastchangeset = Get-MaxChangeset $Project $lastchangeset
}
}
return $lastchangeset
}
$rootTfsUri = "http://tfs:8080/tfs/DefaultCollection"
$allProjectsUri = "$rootTfsUri/_apis/projects?api-version=3.1&`$top=256"
$projectStats = @{}
$response = Invoke-WebRequest -Uri $allProjectsUri -UseDefaultCredentials -Method Get -Verbose -UseBasicParsing
$responseObject = $response.Content | ConvertFrom-Json
if($responseObject.count -ge 1)
{
foreach($prj in $responseObject.value)
{
$lastchangeset = Get-MaxChangeset $prj $null
if($lastchangeset -ne $null)
{
$projectStats.Add("$($prj.name)", $lastchangeset.createdDate)
}
else
{
$projectStats.Add("$($prj.name)", $lastchangeset)
}
}
$projectStats.GetEnumerator() | Export-Csv "CheckInHistory.csv"
}
HTH, 萨姆