2011-12-13 15 views
15

ben şöyle iki yöntem oluşturmanız gerekir:TFS 2010: Changeset ait alınıyor listesi kimlikleri

  1. TFS tüm changesets alın.
  2. Belirtilen değişiklik kümesinden daha yeni olan tüm değişiklik kümelerini alın.

Bazı Google aramaları yaptım ve birkaç bağlantı buldum ve bazı kodları bulmayı başardım. Değişiklik kümesi öğelerinin tam listesini almak için arama yöntemini kullanamıyorum. Bunu elde etmek için birlikte bir şeyler çuvalladığınıdüşünecek ettik ama birisi bana yardımcı olabilir merak ediyorum:

TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://mydomain.com:8080/tfs")); 
VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>(); 
int latestId = versionControl.GetLatestChangesetId(); 

List<Changeset> changesetList = new List<Changeset>(); 
for (int i = 1; i < latestId; i++) 
{ 
    try 
    { 
     Changeset cs = versionControl.GetChangeset(i); 
     if (cs != null) 
     { 
      changesetList.Add(cs); 
     } 
    } 
    catch (ResourceAccessException) 
    { 
    } 
} 

bazı Kimliği amiri eklendi yüzden bir 'ResourceAccessException' istisna atar için changeset alınıyor.

Bunu "doğru" şekilde nasıl yapacağınız hakkında herhangi bir fikir var mı?

Visual Studio 2010'u TFS 2010 ile kullanıyorum. Uygulama C# olarak .NET 4.0 uygulaması olarak yazılıyor.

TIA

+0

Kullanıcı izni sorunu gibi görünüyor. Kullanıcı kimlik bilgilerini iletebileceğiniz GetTeamProjectCollection için aşırı yüklemeyi denediniz mi? Aksi takdirde, kodu yürüten kullanıcının kimlik bilgilerini kullanacaktır. – Strillo

+1

@Morten'ın önerdiği yol sizin için çalışmalıdır. Başarısızlığınız silinmiş değişikliklerden kaynaklanabilir (http://msdn.microsoft.com/en-us/library/bb386005.aspx). Başarısız olanları işaretlerim ve Kaynak Kontrol Gezgini'ne bakın, onlar hakkında çok özel olan şey. – pantelif

cevap

25

bu deneyin: Bu gerekli olan aralıkta tek değişiklik kümesi numaraları var

// Replace with your setup 
    var tfsServer = @"http://tfsserver:8080/tfs/SW"; 
    var serverPath = @"$/PCSW/ProjectX/Main"; 

    // Connect to server 
    var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer)); 
    tfs.Connect(ConnectOptions.None); 
    var vcs = tfs.GetService<VersionControlServer>(); 

    // Create versionspec's. Example start with changeset 529 
    VersionSpec versionFrom = VersionSpec.ParseSingleSpec("C529", null); 
    // If you want all changesets use this versionFrom: 
    // VersionSpec versionFrom = null; 
    VersionSpec versionTo = VersionSpec.Latest; 

    // Get Changesets 
    var changesets = vcs.QueryHistory(
    serverPath, 
    VersionSpec.Latest, 
    0, 
    RecursionType.Full, 
    null, 
    versionFrom, 
    versionTo, 
    Int32.MaxValue, 
    true, 
    false 
    ).Cast<Changeset>(); 
+3

Tüm depoyu almak için şunu kullanın: var serverPath = @ "$ /"; Yalnızca bir havuzun bir kısmını istiyorsanız, "Kaynak Kontrol Gezgini" bölümünde gösterilen yolu seçin. –

+0

Tüm değişiklik kümelerini belirli bir tarih için almak istiyorsam, bu durumda çözümde ne gibi değişiklikler gerekiyor? – Meraj

1

durumda, aşağıdaki kod kullanılabilir.

foreach (var changeset in changesets) 
{ 
    Console.WriteLine(changeset.ChangesetId); 
} 
İlgili konular