Получить все папки из TFS, используя TFS SDK - PullRequest
5 голосов
/ 09 февраля 2010

Я создаю инструмент TFS, который будет получать «информацию о наборе изменений» с сервера TFS.

Теперь я хочу предоставить «Браузер TFS», чтобы пользователь мог просматривать, из какой «ветви / папки» он хочет получить информацию.

Я использую элемент управления TreeView и функцию GetItems для получения пути элементов из TFS:

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
    e.Node.Nodes.RemoveAt(0);
    RecursionType recursion = RecursionType.OneLevel;
    Item[] items = null;

    // Get the latest version of the information for the items.
    ItemSet itemSet = sourceControl.GetItems(e.Node.Tag.ToString(), recursion);
    items = itemSet.Items;

    foreach (Item item in items)
    {
        if (item.ServerItem == e.Node.Tag.ToString()) //Skip self
            continue;

        string filename = Path.GetFileName(item.ServerItem);

        if (Path.GetExtension(filename) == "")
        {
            TreeNode node = new TreeNode(filename, new TreeNode[] { new TreeNode() });
            node.Tag = item.ServerItem;
            e.Node.Nodes.Add(node);
        }
    }
}

Приведенный ниже код демонстрирует, что после нажатия кнопки «развернуть» на узле приложение «запросит» элементы, которые находятся ниже текущей «ветви» (e).

Однако я не хочу включать файлы в браузер. В качестве быстрой и грязной проверки я проверяю, имеет ли «путь» расширение, и если нет, предположим, что это каталог, и покажу его. Все было хорошо, пока я не обнаружил, что у нас есть папка с именем "v1.1".

Есть решение. Я могу повторно вызвать GetItems и проверить его содержимое. По данным MSDN:

Если аргумент пути является файлом, возвращает набор Предметов, которые содержат просто этот файл. Если путь папка, возвращает набор элементов, которые содержат все элементы в этой папке. Если путь содержит подстановочный знак символ, возвращает набор предметов в указанная папка, соответствующая подстановочные.

Однако каждый вызов GetItems занимает примерно секунду, а если папка содержит несколько файлов, «расширение» узла занимает вечность.

Итак, есть ли способ просто получить все "папки" из TFS? Или любая другая идея, как проверить, является ли путь папкой или файлом?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

Кажется, что есть элемент с именем .ItemType для Item. Вы можете проверить это.

0 голосов
/ 09 февраля 2010

Одно решение, которое я только что нашел, - это использование метода GetFileTypes для получения различных расширений, зарегистрированных на сервере. Затем проверьте каждый «элемент» по следующим расширениям:

if (!Extensions.Contains(Path.GetExtension(item.ServerItem).Replace(".","").ToLower()))
{
    //Add Node
}

Однако, это не совсем дурак. Что делать, если папка называется FOLDER.DLL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...