2016-02-05 131 views
0

我需要在TFS构建服务器的assemblyversions中包含changesetid。我创建了更新[AssembliVersion]属性的所有assemblyinfo.cs的powershell脚本。如何在tfs构建服务器上获取当前changesetid?

如何获取tfs中文件夹的当前变更集?

目前我有这样的事情:

function GetLatestChangeset{ 
    Param([string]$projectDir) 

    $changesetId = Get-TfsItemHistory $projectDir -Recurse -version:W | % ChangesetId | sort -Descending 
    if ($changesetId.Count -eq 0){ 
     return 0 
    } 
    return $changesetId[0] 
} 

但它返回最新变更ID,而不是一个正在兴建

回答

0

如果您在门控签入的范围和内这样做变更尚未提交,则不会有“当前”变更集。我们做类似的事情,但是在构建完成之后,然后简单地查询构建服务器以获得如下的最新构建;

var buildDetail = context.GetExtension<IBuildDetail>(); 
    var vcserver = buildDetail.BuildServer.TeamProjectCollection.GetService<VersionControlServer>(); 

    var queryHistoryResult = vcserver 
           .QueryHistory(versionControlPath, VersionSpec.Latest, 0, 
               RecursionType.Full, null, null, null, 1, 
               true, false) 
           .Cast<Changeset>() 
           .ToList(); 

    if (!queryHistoryResult.Any()) 
    { 
     throw new ChangesetNotFoundException("GetLatestChangesetActivity: No current changeset available."); 
    } 

    var changeset = queryHistoryResult.First(); 

它看起来几乎与您的代码相同。

+0

我不在门控签入范围内执行。问题是,当这个脚本执行时,可能会有更新的变更集,因为正在构建的变更集已经是 – Liero