Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: KrzysiekОтветов: 2

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

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

branch

Ответы

Ответ 1 · рейтинг 4 · Christian

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

...
// 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! :)
  }
}
...

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

Ответ 2 · рейтинг 2 · Betty

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы