2010-02-09 41 views
5

Estoy creando una herramienta TFS que obtendrá "información de conjunto de cambios" del servidor TFS.Obtenga todas las carpetas de TFS usando TFS SDK

Ahora, deseo proporcionar un "Explorador de TFS" para que el usuario pueda explorar de qué "bifurcación/carpeta" quiere obtener información.

estoy usando un control TreeView y las GetItems función para obtener la ruta de los ítems de 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); 
     } 
    } 
} 

El código siguiente muestra que después de hacer clic en el botón 'ampliar' de un nodo, la aplicación "consultará" los artículos que están debajo de la "rama" actual (e).

Sin embargo, no quiero incluir archivos en el navegador. Como una verificación rápida y sucia, estoy verificando si la "ruta" tiene una extensión y si no, supongo que es un directorio y se lo muestro. Todo estuvo bien hasta que descubrí que tenemos una carpeta llamada "v1.1".

Hay una solución. Puedo volver a invocar GetItems y verificar su contenido. De acuerdo con MSDN:

Si el argumento de ruta es un archivo, devuelve un conjunto de elementos que contengan sólo ese fichero. Si la ruta es una carpeta , devuelve un conjunto de elementos que contienen todos los elementos en esa carpeta. Si la ruta contiene un carácter comodín , devuelve un conjunto de elementos en la carpeta especificada que coincide con el comodín .

Sin embargo, cada llamada a GetItems toma aproximadamente un segundo y si una carpeta contiene varios archivos, la "expansión" del nodo tarda una eternidad.

Entonces, ¿hay alguna forma de obtener todas las "carpetas" de TFS? ¿O alguna otra idea de cómo comprobar si una ruta es una carpeta o un archivo?

Gracias!

Respuesta

2

Parece que hay un miembro llamado .ItemType for Item. Puedes verificar eso.

+1

You da man Ian - Estoy implementando casi la misma idea, estaba en proceso de utilizar el índice de "." que no me gustó ... bueno, llama aquí ... ¡+1 en este y tu original! – dbobrowski

0

Una solución que acabo de encontrar es utilizar el método GetFileTypes para recuperar las diferentes extensiones registradas en el servidor. Luego revise cada "artículo" contra estas extensiones de la siguiente manera:

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

Sin embargo, esto no es realmente infalible. ¿Qué pasa si una carpeta se llama FOLDER.DLL?

Cuestiones relacionadas