2012-11-15 2 views
0

내가 원하는 것은 내가 병합 할 수있는 분기를 얻는 것입니다. TFS2008에서 병합을 말하고 대상 분기를 선택할 때 드롭 다운과 거의 같습니다.TFS SDK : 자식 분기 가져 오기

그러나 방법을 찾는 것은 매우 어려웠습니다.

아래의 코드는 웹에서 찾은 일부 리소스 간의 병합이지만 아무 것도 작동하지 않는 것 같습니다. 내 생각 엔 VS2008이 그것을 할 수 있다면 SDK를 통해 할 수 있다는 것입니다.

아래 코드는 항상 동일한 결과를 제공합니다.

내 저장소는 다음과 같이이다 :

Development 
    Version1 
    Code 
    Version2 
    Code 
    Version3 
    Code 
Main 
    Code 

을 그리고 일반적으로 나는 병합 홈페이지 수행 할 수 있도록 홈페이지> 버전 X.> 홈페이지에 버전 X 및 버전 X를 분기.

아래 코드는 Version3 폴더로 (tfsParentBranchPath)를 쿼리하고 있어도 항상 Main의 하위 항목을 제공합니다.

아마도 TFS2010 웹 서비스를 사용했지만 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(); 
} 

답변

0

마지막으로 이것이 작동하는 마지막 버전입니다.

먼저 VS2010 어셈블리를 사용하지 않았으며 훨씬 빨라졌습니다.

둘째는 큰 차이가이 라인 :

var treeItem = branchHistoryTree[0][0].GetRequestedItem(); 

난 정말 왜 차이 몰라,하지만 반환 된 항목이 일반적인 하나, 그 방법은없는 것 같다.

public string[] GetChildBranchesToMerge(string tfsParentBranchPath) 
{ 
    DoLog("Getting child branches for {0} ...", tfsParentBranchPath); 
    VersionControlServer vcs = (VersionControlServer)teamFoundationServer.GetService(typeof(VersionControlServer)); 

    List<string> childs = new List<string>(); 
    ItemSpec[] specs = new ItemSpec[] { new ItemSpec(tfsParentBranchPath, RecursionType.OneLevel) }; 
    BranchHistoryTreeItem[][] branchHistoryTree = vcs.GetBranchHistory(specs, VersionSpec.Latest); 

    if (branchHistoryTree.Length > 0 && branchHistoryTree[0].Length > 0) 
    { 
     var treeItem = branchHistoryTree[0][0].GetRequestedItem(); 
     AddChildBranch(childs, treeItem, tfsParentBranchPath); 

     if (treeItem.Children != null && treeItem.Children.Count > 0) 
     { 
      foreach (BranchHistoryTreeItem tia in treeItem.Children) 
      { 
       AddChildBranch(childs, tia, tfsParentBranchPath); 
      } 
     } 
    } 

    DoLog("{0} child branches found", childs.Count); 

    return childs.OrderBy((s) => 
    { 
     return s; 
    }).ToArray(); 
} 

private void AddChildBranch(List<string> list, BranchHistoryTreeItem itemToCheck, string tfsParentBranchPath) 
{ 
    if (itemToCheck.Relative.BranchFromItem != null && itemToCheck.Relative.BranchFromItem.DeletionId == 0 && itemToCheck.Relative.BranchFromItem.ServerItem != tfsParentBranchPath) 
     list.Add(itemToCheck.Relative.BranchFromItem.ServerItem); 

    if (itemToCheck.Relative.BranchToItem != null && itemToCheck.Relative.BranchToItem.DeletionId == 0 && itemToCheck.Relative.BranchToItem.ServerItem != tfsParentBranchPath) 
     list.Add(itemToCheck.Relative.BranchToItem.ServerItem); 
}