birincil cevap kod her zaman tüm hedef dalları döndürmez. Benim testimde, Visual Studio birleştirme iletişim kutusundan daha az bir şube verdi.
Hedef dalların listesini almak için daha basit ve güvenli bir yol var.
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;
}
}
Bu kod her zaman birleştirme iletişim kutusu olarak aynı listeyi verir: Bu, Visual Studio Birleştirme iletişim kutusu için listesini aldığı aynı yoldur.
Burada bir şey eksik olabilir, ancak QueryMergeRelationships, değişken adlandırma uygulamanızın aksine bir ana ilişki de dahil olmak üzere, herhangi bir ilişkinin bulunduğu öğelerin listesini döndürür; kodunuz kök dalını kullandığınızı varsayar ve daha sonra tüm çocukların listesini sağlar, çünkü bu köktür. Ama eğer bir çocuk dalını geçerseniz, aynı zamanda, Kaptan Comic'in sorusunun gerekliliklerini yerine getirmeyecek olan ebeveyn dalını da geri getirecektir, “Başka hangi klasörlerin dallanmış olduğunu bulmalıyım”, ki bu sadece dolaylı olarak çocuk anlamına gelir. dallar gereklidir. – paulyphonic
Doğru. Değişkenleri ve yöntem adını değiştirdim. Bir ebeveynin hangi yol olduğunu tanımlamak ve bunu hariç tutmak için API'da bir yol olabilir. –