TFS 2010 программно определяет ветвь элемента

Как программно определить, к какой ветке относится этот файл? Я потратил 3 часа, пытаясь понять это, но безрезультатно. Я нашел эту тему, но это не то, что мне нужно: Как программно получить информацию о ветках в TFS?


person Krzysiek    schedule 08.08.2011    source источник
comment
Вы имеете в виду файл в своей рабочей области или файл в пути системы управления версиями?   -  person John Saunders    schedule 08.08.2011
comment
Возможно, я опишу свою проблему более подробно, я хочу иметь пользовательскую политику, которая определяет, все ли файлы в наборе изменений поступают из одной ветки, поэтому, отвечая на ваш вопрос, я не думаю, что это действительно имеет значение, поскольку у PendingChange есть пути бота, LocalItem - путь к рабочей области, ServerItem - путь к системе управления версиями.   -  person Krzysiek    schedule 09.08.2011
comment
Спасибо. Пожалуйста, добавьте это описание к вашему вопросу. Чем больше информации вы предоставите, тем лучше. Однако я обеспокоен тем, что вы хотите, чтобы все файлы в наборе изменений исходили из точки ветвления, расположенной выше в дереве системы управления версиями, чем все они. Ваш исходный контроль начинается с $/Main и оттуда ветвится?   -  person John Saunders    schedule 09.08.2011


Ответы (2)


У меня была очень похожая проблема. Я нашел решение, вот код:

...
// get all branches
VersionControlServer vcs = tfs.GetService(typeof(VersionControlServer));
BranchObject[] allBranches = vcs.QueryRootBranchObjects(RecursionType.Full);

string myItem = "$/My Project/some Path including the branch/myFile.txt";

foreach(BranchObject branch in allBranches)
{
  if(myItem.Contains(branch.Properties.RootItem.Item))
  {
    // branch is the branch to which the item belongs! :)
  }
}
...

Я надеюсь, что это поможет кому-то с этой проблемой, я думаю, что оп уже решил ее (прошло некоторое время с тех пор, как он задал вопрос).

person Christian    schedule 27.01.2012

Единственный способ, который я нашел для получения информации о ветке для определенного файла, — это использовать VersionControlServer.QueryBranchObjects для запроса каждой возможной ветки в структуре папок вплоть до корня.

Однако вы можете сделать несколько предположений и сделать это довольно эффективно, поскольку ветка не может находиться в другой ветке в tfs 2010. Найдите общее подмножество путей всех проверяемых файлов и проверьте их, если ни одна из них не является ветвью, то они не относятся к одной ветке.

person Betty    schedule 24.10.2011