.net tfs tfs-sdk

.net - ¿Cómo obtener información sobre las sucursales en TFS mediante programación?



tfs-sdk (2)

El código en la respuesta principal no siempre devuelve todas las ramas de destino . En mis pruebas, devolvió una rama menos que el cuadro de diálogo de combinación de Visual Studio.

Existe una forma más sencilla y segura de obtener la lista de ramas de destino. Esta es la misma forma en que Visual Studio obtiene la lista para el cuadro de diálogo Combinar:

using System; using System.Collections.Generic; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.VersionControl.Client; class Program { static void Main(string[] args) { string tfsUri = "http://tfs:8080/tfs/MyCollection"; string tfsItemSpec = "$/MyTeamProject/Folder"; List<string> branches = GetPathsEligibleForMerge(tfsUri, tfsItemSpec); foreach (string branch in branches) { Console.WriteLine(branch); } } public static List<string> GetPathsEligibleForMerge( string tfsUri, string tfsBranchPath) { List<string> tfsEligibleMergePaths = new List<string>(); using (TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(tfsUri))) { VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer)); foreach (ItemIdentifier mergeItem in vcs.QueryMergeRelationships(tfsBranchPath)) { if (!mergeItem.IsDeleted && !string.IsNullOrWhiteSpace(mergeItem.Item)) { tfsEligibleMergePaths.Add(mergeItem.Item); } } } tfsEligibleMergePaths.Sort(StringComparer.OrdinalIgnoreCase); return tfsEligibleMergePaths; } }

Este código siempre devuelve la misma lista que el cuadro de diálogo Combinar.

Necesito encontrar información sobre las sucursales en TFS mediante programación. Por ejemplo, lo que más me interesa es la carpeta raíz $ / MyProject / Project1 que necesito para averiguar qué otras carpetas se han ramificado. Estoy justo después de los métodos API correctos.

Digamos que tengo conexión con el servidor TFS y tengo acceso a las instancias de clase VersionControlServer y Workspace .


Ok, esto fue más fácil y más difícil de lo que pensé. Pude juntar esto de varias fuentes diferentes, pero esto parece funcionar. Te advertiré, no hay ningún error en el manejo aquí, y si el itemSpec no existe, bombardea con una excepción.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.VersionControl.Client; static void Main(string[] args) { TfsTeamProjectCollection tfs = new TfsTeamProjectCollection( new Uri("http://tfs:8080")); string srcFolder = "$/ProjectName"; var versionControl = tfs.GetService<VersionControlServer>(); ItemSpec[] specs = new ItemSpec[]{new ItemSpec(srcFolder, RecursionType.None)}; System.Console.WriteLine(string.Format("Source folder {0} was branched to:", srcFolder)); BranchHistoryTreeItem[][] branchHistory = versionControl.GetBranchHistory(specs, VersionSpec.Latest); foreach (BranchHistoryTreeItem item in branchHistory[0][0].Children) { ShowChildren(item); } System.Console.WriteLine(); System.Console.WriteLine("Hit Enter to continue"); System.Console.ReadLine(); } static void ShowChildren(BranchHistoryTreeItem parent) { foreach (BranchHistoryTreeItem item in parent.Children) { System.Console.WriteLine( string.Format("Branched to {0}", item.Relative.BranchToItem.ServerItem)); if (item.Children.Count > 0) { foreach(BranchHistoryTreeItem child in item.Children) { ShowChildren(child); } } } }