2012-04-04 19 views
6

TFS'de (örn. Ana) tek bir şubeye bağlı olarak çalıştırılan bir dizi yapı tanımları var.TFS: Belirli bir değişiklik kümesini içeren yapılara ilişkin sorgu

Tedarik ettiğim belirli bir değişiklik numarası içeren tüm yapıları bulmak için TFS'yi (her nasılsa) sorgulamak ve TFS'nin içerdiği yapıların adlarının bir listesini döndürmek istiyorum. Herhangi bir uygulama (VS uzantısı, CLI uygulaması, winforms, ne olursa olsun) yapacak.

Not: Bu bir 'plz kodunu bana' isteği değil; Onu tokatlamak ve bu konuda ciddi çalışmalar yapmak istiyorum. Veritabanını veya SDK'yı nasıl sorgulayacağınıza veya nasıl sorgulanacağına dair bir belgeye ilişkin göstergelere işaret eder; bakmaya başlamak için sadece bir yer son derece yararlı olurdu. Teşekkürler.

cevap

8

aşağıdaki pasajı tüm tarama bir Koleksiyonu tüm Takım Projesi tanımları kurmak ve her kontrol eder ve her giriş değişiklik kümesi numarasına Derneği inşa edecek:

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); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Söylemeye gerek, bu kaba kuvvet saldırısı. buildDefinition listesini daraltmak, belirli teamProjects vb. Üzerinde odaklama yapmak isterseniz kodu daha da hassaslaştırabilirsiniz. Her halükarda yukarıdakilerin olabildiğince kullanışlı olduğunu hayal edemiyorum!

(Açıkçası) MSDN'dan ayrı olarak, TFS-SDK için harika bir kaynak Shai Raiten'in blog'dur.
Build-Speficic örnekleri için, bazı olası ilginç SO iletileri için de here & here'a bakın.

+0

Teşekkür ederiz! Sorgulama sırasında daha fazla filtreleme seçeneği sunulmasını isterdim; Bilgilerinizi koruduğumuz bir dizi yapımız var ve sorguların geri dönmesi çok uzun sürüyor. Deneyeceğim ve göreceğim. –

2

Bu küçük DB Query'i TFS 2010'da kullanabilir ve yalnızca 90264'ün yerine changeet kimliğinizi kullanabilirsiniz.

USE Tfs_Warehouse 
go 
SELECT BuildName 
FROM DimBuild 
    INNER JOIN FactBuildChangeset 
    ON DimBuild.BuildSK = FactBuildChangeset.BuildSK 
WHERE FactBuildChangeset.ChangesetSK = 90264 
İlgili konular