私がやりたいことは、マージできる利用可能なブランチを取得することです。TFS2008 でマージと言って宛先ブランチを選択するときのドロップダウンとほとんど同じです。
しかし、その方法を見つけるのは非常に困難でした。
以下のコードは、Web で見つけたいくつかのリソースをマージしたものですが、どれも機能していないようです。私の推測では、VS2008 でそれができるのであれば、SDK を介してそれを行うことができますよね?.
以下のコードでは、常に同じ結果が得られます。
私のリポジトリは次のようなものです:
Development
Version1
Code
Version2
Code
Version3
Code
Main
Code
通常、メイン > バージョン X に分岐します。そのため、メイン > バージョン X とバージョン X をメインにマージできます。
以下のコードは、Version3 フォルダーで (tfsParentBranchPath) を照会している場合でも、常に Main の子を提供します。
これはおそらく、TFS2010 Web サービスを使用していたのに TFS2008 を指していたからでしょうか (そのため、コードで機能しないメソッドをいくつかマークしました)。
誰かが答えを知っているなら、私に知らせてください。
ありがとう!
public string[] GetChildBranchesToMerge(string tfsParentBranchPath)
{
var versionControl = teamFoundationServer.GetService<VersionControlServer>();
//not supported by tfs2008
//ItemIdentifier[] identifiers = versionControl.QueryMergeRelationships(tfsParentBranchPath);
//var allBranches = versionControl.QueryBranchObjects(new ItemIdentifier(tfsParentBranchPath), RecursionType.OneLevel);
List<string> childs = new List<string>();
ItemSpec[] specs = new ItemSpec[] { new ItemSpec(tfsParentBranchPath, RecursionType.OneLevel) };
BranchHistoryTreeItem[][] branchHistoryTree = versionControl.GetBranchHistory(specs, VersionSpec.Latest);
if (branchHistoryTree.Length > 0 && branchHistoryTree[0].Length > 0)
{
var treeItem = branchHistoryTree[0][0];
if (treeItem.Children.Count > 0)
{
foreach (BranchHistoryTreeItem tia in treeItem.Children)
{
childs.Add(tia.Relative.BranchToItem.ServerItem);
}
}
}
return childs.OrderBy((s) =>
{
return s;
}).ToArray();
}