10

Is there a way, either via a query or programmatically, to identify all TFS Changesets that are NOT linked to a Work Item?

4

3 に答える 3

7

TFS PowerToyのPowerShellモジュールの使用:

ワークスペース内のどのフォルダからでも、興味のあるものは次のとおりです。

Get-TfsItemHistory . -Recurse | Where-Object { $_.WorkItems.Length -eq 0 }

これにより、現在のフォルダーとすべてのサブフォルダーの履歴が取得され、空の作業項目リストがフィルター処理されます。

于 2011-07-18T15:49:56.283 に答える
1

もちろん、TFSAPIを使用してこれを非常に簡単に行うことができます。

public static void GetAllChangesetsWithNoWorkItems()
{
    var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs2010/tfs/default"));
    var service = tfs.GetService<VersionControlServer>();

    var histories = service.GetBranchHistory(new ItemSpec[] { new ItemSpec(@"$/ProjectName/MAIN/BUILD", RecursionType.OneLevel) }, VersionSpec.Latest);

    foreach (BranchHistoryTreeItem history in histories[0])
    {
        var change = service.GetChangeset(history.Relative.BranchToItem.ChangesetId, true, true);

        if(change.WorkItems.ToList().Count == 0)
        {
            Debug.Write(String.Format("Work Item Missing for Changeset {0}", change.ChangesetId));
        }
    }
}

プログラムでTFSAPIに接続する方法については、このブログ投稿を読むことができますhttp://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to-tfs-2010-programmaticallyndashpart-1。 aspx

于 2011-07-18T16:22:59.893 に答える
1

リチャードの回答についてはわかりませんが、受け入れられた回答は、チームプロジェクトコレクションのルートから実行するのに約2分かかりました。これは、特定のユーザーを探している場合は10秒、そうでない場合は47秒で実行されます。

service.QueryHistory("$/TeamProject/", VersionSpec.Latest,0, RecursionType.Full,userName,null,null, Int32.MaxValue,true,false)
    .Cast<Changeset>()
    .Where(cs=>cs.AssociatedWorkItems.Length==0)

userNamenullに設定された特定のユーザーを探していない場合

http://share.linqpad.net/6sumno.linq

于 2014-09-15T18:56:30.633 に答える