アプリケーションの 2 つのリリース間で変更ログ (実際には作業項目のリスト) を自動的に生成する方法を探しています。アプリケーションには v1 と v2 の 2 つのバージョンがあり、それぞれは、アプリのセットアップをビルドする前に手動で作成した TFS 2010 のラベル (LABEL1 と LABEL2) によって識別されます。私は分岐システムを持っています。つまり、ほとんどのバグが修正されたトランクと、主にトランクからのマージを使用してパッチが適用されるブランチがあります (ただし、トランクに関係のないブランチのみの修正もあります)。 . アプリケーションの 2 つのバージョン (v1 と v2) は、ブランチのバージョンです。
TFS 2010 が、これら 2 つのラベルの間で修正されたバグのリスト (つまり、type = Bug で、クローズされ、検証された作業項目のリスト) を返すことができるようにしたいと考えています。
TFS 2010 の Web UI または Visual Studio を使用してこれを実現しようとしましたが、方法が見つかりませんでした。
次に、次のコマンド ラインを使用して tf.exe に履歴を要求しようとしました。
tf history /server:http://server_url/collection_name "$/project_path" /version:LLABEL1~LLABEL2 /recursive /noprompt /format:brief
ここで、LABEL1 はアプリケーションの v1 のソース コードに関連付けられているラベルであり、LABEL2 はアプリケーションの v2 のソース コードに関連付けられているラベルです。実際には 2 つの方法で失敗します: - コマンド ラインは変更セットのリストのみを返し、関連する閉じた作業項目のリストは返しません - 変更セットのリストにはブランチ自体に適用した変更セットのみが含まれ、私が適用した変更セットも含まれませんそしてトランク、そしてブランチにマージされました。「/slotmode」パラメーターを設定してもしなくても、何も変わりません。
そこで、作業項目のリスト (変更セットのリストではない) を取得する C# コードを書き込もうとしました。
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://server_url/collection_name"));
VersionControlServer controlServer = tfs.GetService<VersionControlServer>();
VersionControlServer vcs = tfs.GetService<VersionControlServer>();
VersionSpec sFrom = VersionSpec.ParseSingleSpec("LLABEL1", null);
VersionSpec sTo = VersionSpec.ParseSingleSpec("LLABEL2", null);
var changesets = vcs.QueryHistory(
"$/project_path",
sTo,
0,
RecursionType.Full,
null,
sFrom,
sTo,
int.MaxValue,
true,
false); // Slotmode to false
Dictionary<int, WorkItem> dico = new Dictionary<int, WorkItem>();
foreach (Changeset set in changesets)
{
foreach (WorkItem zz in set.WorkItems)
{
if (!dico.ContainsKey(zz.Id))
{
dico.Add(zz.Id, zz);
}
}
}
foreach (KeyValuePair<int, WorkItem> pair in dico.OrderBy(z => z.Key))
{
Console.WriteLine(string.Format("ID: {0}, Title: {1}", pair.Key, pair.Value.Title));
}
これは実際に機能し、実際に私が望んでいた 2 つのラベル間の作業項目のリストを取得します。ただし、ブランチ自体でコミットされた変更セットに関連付けられた作業項目のみが考慮されます。トランクで解決されてからブランチにマージされたタイプ「バグ」の作業項目は表示されません。Slotmode は何も変更しません。
次に、ラベルによって定義された VersionSpecs を、変更セットによって定義された VersionSpecs に置き換えようとしました。
VersionSpec sFrom = VersionSpec.ParseSingleSpec("C5083", null);
VersionSpec sTo = VersionSpec.ParseSingleSpec("C5276", null);
そして、私のコードは最終的に機能します。
私の質問は、バージョンを識別するために使用する TFS オブジェクトであるラベルを使用して、どうすれば同じ結果を得ることができるかということです。それが不可能な場合、TFS 2010 でバージョンを特定するにはどうすればよいですか? どうも。
ところで、stackoverflow に関するいくつかの質問を見つけましたが、どれもラベル付きの回答をくれませんでした。例: 質問の例