2012-04-04 36 views
6

Tôi có một số định nghĩa xây dựng được thực hiện dựa trên một nhánh đơn trong TFS (ví dụ: Main).TFS: Truy vấn cho các bản dựng có chứa một thay đổi cụ thể

Tôi muốn (bằng cách nào đó) truy vấn TFS để tìm tất cả các bản dựng có chứa một số thay đổi cụ thể mà tôi cung cấp và trả về danh sách chuỗi tên của các bản dựng mà TFS chứa. Bất kỳ loại ứng dụng (mở rộng VS, ứng dụng CLI, winforms, bất cứ điều gì) sẽ làm.

Lưu ý: đây không phải là yêu cầu 'plz cho tôi mã'; Tôi sẵn sàng hoof nó và làm công việc nghiêm túc về điều này. Bất kỳ gợi ý nào về tài liệu về cách truy vấn cơ sở dữ liệu hoặc SDK hoặc ví dụ về cách truy vấn các bản dựng; chỉ một số nơi để bắt đầu tìm kiếm sẽ cực kỳ hữu ích. Cảm ơn.

Trả lời

8

Đoạn sau đây sẽ thu thập tất cả Xây dựng định nghĩa của tất cả các nhóm dự án của một Bộ sưu tập, và sẽ kiểm tra từng xây dựng cho một Hiệp hội với số changeset đầu vào:

using System; 
using System.Linq; 
using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace FindChangesetInBuild 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/collectionName")); 

      var versionControl = teamProjectCollection.GetService<VersionControlServer>(); 
      var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer)); 

      var teamProjects = versionControl.GetAllTeamProjects(true); 
      foreach (var teamProject in teamProjects) 
      { 
       var buildDefinitions = buildService.QueryBuildDefinitions(teamProject.Name); 
       foreach (var buildDefinition in buildDefinitions) 
       { 
        var builds = buildService.QueryBuilds(buildDefinition); 
        foreach (var buildDetail in builds) 
        { 
         var changesets = InformationNodeConverters.GetAssociatedChangesets(buildDetail); 
         if (changesets.Any(changesetSummary => changesetSummary.ChangesetId == Convert.ToInt32(args[0]))) 
         { 
          Console.WriteLine("Changeset was build in "+buildDetail.BuildNumber); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Không cần phải nói, đây là một cuộc tấn công bạo lực.
Bạn có thể tinh chỉnh thêm mã nếu bạn thu hẹp danh sách buildDefinition, tập trung vào teamProjects cụ thể, v.v. Trong mọi trường hợp, tôi khó có thể tưởng tượng được điều này hữu ích như là!

Ngoài (rõ ràng) MSDN, một nguồn tài nguyên tuyệt vời cho TFS-SDK là blog của Shai Raiten.
Ví dụ về xây dựng-Speficic, hãy kiểm tra here & here cho một số bài đăng SO có thể thú vị.

+0

Cảm ơn bạn! Tôi muốn có nhiều tùy chọn lọc hơn khi truy vấn; chúng tôi có một số bản dựng mà chúng tôi đang giữ lại thông tin và phải mất một thời gian rất dài để các truy vấn trả lại. Tôi sẽ thử nghiệm và xem. –

2

Bạn có thể sử dụng truy vấn DB nhỏ này trong TFS 2010 và chỉ thay thế 90264 bằng id changeset của bạn.

USE Tfs_Warehouse 
go 
SELECT BuildName 
FROM DimBuild 
    INNER JOIN FactBuildChangeset 
    ON DimBuild.BuildSK = FactBuildChangeset.BuildSK 
WHERE FactBuildChangeset.ChangesetSK = 90264 
Các vấn đề liên quan