Как получить список файлов из нескольких наборов изменений с помощью rest API - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь получить список файлов для формирования нескольких наборов изменений, используя TFS rest API.Мне удалось успешно получить список файлов для одного набора изменений, используя следующий URL:

https://company.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/"{ChangesetsetID}/changes?api-version=4.1"

Как получить список файлов для формирования нескольких наборов изменений?Я использовал Javascript Ajax, чтобы получить и показать.

1 Ответ

0 голосов
/ 15 сентября 2018

Как правило, для файлов, добавляемых в систему контроля версий, вы можете изменять их в зависимости от ваших требований / отладки и т. Д., А затем регистрироваться с помощью changeset. Это означает, что почти все файлы принадлежат нескольким наборам изменений ...

Итак, по моему мнению, не имеет смысла получать список файлов, которые принадлежат нескольким наборам изменений. Вместо этого получение файлов, принадлежащих одному чансету, имеет больше смысла ...

Как бы то ни было, вы можете получить наборы изменений, которые содержат изменения к указанному элементу / файлу, с использованием API REST ниже:

GET https://SERVER:8080/TFS/{CollectionName}/_apis/tfvc/changesets?searchCriteria.itemPath=$/Fabrikam-Fiber-TFVC/AuthSample/AuthSample/Program.cs&api-version=3.2

Вы можете получить имя файла и вызвать REST API в цикле для проверки каждого файла. Если значение значения в ответе больше 1, то файл должен быть тем, который вы хотите получить. ..

Пример PowerShell для вашей справки: (Измените path в теле, например, в приведенном ниже примере. Я проверил файлы по пути: $/ScrumProject/ConsoleApplication1/ConsoleApplication1)

Param(
   [string]$collectionurl = "http://server:8080/tfs/DefaultCollection",
   [string]$user = "domain\name",
   [string]$token = "password",
   [string]$exportpath = "D:\temp"

)
$filename = (Get-Date).ToString("yyyyMMdd-HHmmss") + "-" + "FileList.csv"

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

#Get path of the files from a sepcific folder 
$fileurl = "$collectionurl/_apis/tfvc/itemBatch?api-version=3.2"

$body = '{"includeContentMetadata":true,"includeLinks":null,"itemDescriptors":[{"path":"$/ScrumProject/ConsoleApplication1/ConsoleApplication1","versionType":5,"recursionLevel":4}]}'

$pathresponse = Invoke-RestMethod -Uri $fileurl -Method POST -Body $body -ContentType "application/json"-Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$paths = $pathresponse.value.path

Clear-Host
#Get changesets that contain changes to the specified item/file
foreach ($path in $paths )
{
$baseUrl = "$collectionurl/_apis/tfvc/changesets?searchCriteria.itemPath=$path&api-version=3.2" 
$changesetResponse = Invoke-RestMethod -Uri $baseUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$count = $changesetResponse.count

#Displsy and export the matching files to a *.csv file

 if ($count -gt 1)
 {
  Write-host $path
  $path | Add-Content $exportpath\$filename
 }
}

enter image description here

...