これは、TFS2010と変更ログを作成する可能性についての私の以前の質問に続くものです。
以前はラベルを使用してプログラムのバージョンを識別していましたが、ラベルは特定の時点では固定されていないため、現在はブランチを使用しています。
ブランチ階層は次のようになります。
ご覧のとおり、トランクのブランチである2つの異なるアプリケーションがあります:(APP_A
アプリケーションA)とAPP_B
(アプリケーションB)。どちらもほぼ同じですが、機能上の違いがいくつかあります。
アプリケーションの新しいバージョン(たとえばバージョン1.3)を作成するプロセスは次のとおりです。
- が変更されました
Main trunk
(新しい機能が追加され、バグが修正されました...) - 変更されたもの
Main trunk
から、新しいブランチが作成されます。Main trunk 1.3
APP_A
ブランチが変更される可能性があるため、の固有の機能APP_A
はv1.3の変更で機能しますAPP_B
ブランチが変更される可能性があるため、の固有の機能APP_B
はv1.3の変更で機能しますMain trunk 1.3
APP_A
とにマージされるため、とアプリケーションのAPP_B
両方がの変更を受け取りますAPP_A
APP_B
Main trunk
- 変更された
APP_A
ブランチから、新しいブランチが作成されます。APP_A_1.3
- 変更された
APP_B
ブランチから、新しいブランチが作成されます。APP_B_1.3
APP_A_1.3
私の目標は、との間の変更ログを作成できるようにすることAPP_A_1.2
です。
変更ログとは、WorkItemのリストを意味します。チェックインされる各チェンジセットは、1つ以上のワークアイテム(たとえば、バグアイテム)に関連付けられています。影響を受けたチェンジセットにリンクされたすべての作業項目のリストを取得できるようにしたいと思いますAPP_A_1.3
。これらのチェンジセットは、Main trunk
(上記のステップ1)、APP_A branch
(上記のステップ3)、またはAPP_A_1.3
ブランチ自体(ホットフィックスがブランチが作成された後にチェックインされます)。
この作業項目のリストを取得するために、「リンク」されているすべてのチェンジセットのリストAPP_A_1.2
(「リンク」=チェンジセットにチェックインされたコードがブランチにあるAPP_A_1.2
)と、に「リンク」されていAPP_A_1.3
ます。
そうすれば、どのチェンジセットがに「リンク」されているのか、「リンク」されAPP_A_1.3
ていないのかを知ることができますAPP_A_1.2
。この変更セットのサブセットから、関連するすべてのWorkItemを取得し、変更ログを取得します。
これが私の問題です。指定されたブランチに「リンク」されているすべてのチェンジセットのリストを取得するにはどうすればよいですか?C#コードにTFS2010APIを使用しています。
私のプログラムの入力(指定されたブランチのすべてのチェンジセットを取得する)はブランチの名前(たとえばAPP_A_1.2
)になり、出力は次のチェンジセットのリストになります。
APP_A_1.2
ブランチ自体に適用されるチェンジセット- 作成
APP_A
前にブランチに適用されたチェンジセットAPP_A_1.2
Main trunk 1.2
にマージされる前にブランチに適用されたチェンジセットAPP_A
- 作成
Main trunk
前にブランチに適用されたチェンジセットMain trunk 1.2
これらすべてのチェンジセットを取得するために、次のコードを記述しました。
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1ChangeSets = myVersionControlServer.QueryHistory(
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
0,
RecursionType.Full,
null,
null,
null,
int.MaxValue,
false,
false).OfType<Changeset>().Select(z => z.ChangesetId).ToList();
指定されている場合でもRecursionType.Full
、上記のコードはブランチ自体にチェックインされたチェンジセットのみを返します。APP_A_1.2
これは、VisualStudioのソースコードエクスプローラービューの[履歴]コマンドと同じです。
次に、次のコードを試しました。
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1MergedChangeSets = myVersionControlServer.QueryMerges(
null,
null,
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
null,
null,
RecursionType.Full).Select(z => z.SourceVersion).ToList();
APP_A_1.2
これにより、ブランチでチェックインされたチェンジセットと、作成APP_A
前にブランチでチェックインされたチェンジセットが返さAPP_A_1.2
れます。はるかに優れていますが、十分ではありません。APP_A
(私の場合) 「上」にあるブランチで再帰を機能させる方法が見つかりませんMain trunk
...
誰かアイデアがありますか?
また、2つのブランチ間の変更ログを取得するためのより良いアイデアは大歓迎です...Thx。