2011-12-13 12 views
15

私は次のように2つのメソッドを作成する必要がありガイド:TFS 2010:チェンジセットIDのリスト

  1. は、TFSのすべてのチェンジセットを取得します。
  2. 指定したチェンジセットより新しいすべてのチェンジセットを取得します。

私はいくつかのGoogleの検索を行っていくつかのリンクを見つけ、いくつかのコードを考え出すことができました。私はチェンジセット項目の完全なリストを取得するために呼び出すメソッドを動作させるように見えることはできません。私はこれを取得するために、一緒に何かをしくじってきた誰かが私を助けることができるかどうかと思いまして:

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

一部同上のは、ハンドラが追加されている理由である「ResourceAccessException」例外をスローするためにチェンジセットを取得します。

「正しい」方法でこれを行う方法に関するアイデアはありますか?

私はTFS 2010でVisual Studio 2010を使用しています。アプリケーションはC#で.Net 4.0アプリケーションとして書かれています。

TIA

+0

ユーザー権限の問題のようです。ユーザー資格情報を渡すことができるGetTeamProjectCollectionのオーバーロードを試しましたか?それ以外の場合は、コードを実行しているユーザーの資格情報を使用します。 – Strillo

+1

@Mortenが提案した方法は、あなたのためにうまくいくはずです。削除されたチェンジセット(http://msdn.microsoft.com/en-us/library/bb386005.aspx)が原因の可能性があります。私は失敗したものをマークし、ソースコントロールエクスプローラを見て、何が特別なのかを見てみましょう。 – pantelif

答えて

25

これを試してください、それが必要とされる範囲でのみチェンジ番号です

// 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

リポジトリ全体を取得するには、次のようにします。var serverPath = @ "$ /";リポジトリの一部だけが必要な場合は、「ソース管理エクスプローラ」に示すパスを選択します。 –

+0

特定の日付にすべてのチェンジセットを取得したい場合は、どのような変更が必要ですか? – Meraj

1

場合、次のコードを使用することができます。

foreach (var changeset in changesets) 
{ 
    Console.WriteLine(changeset.ChangesetId); 
} 
関連する問題