2010-07-13 20 views
5

Dada una ruta particular de carpeta en tfs, necesito buscar recursivamente todos los archivos y carpetas dentro de la carpeta para un conjunto de cambios dado. En otras palabras, necesito obtener el cierre transitivo de una ruta en tfs para un conjunto de cambios determinado. El problema al que me estoy enfrentando es al listar el contenido de una carpeta particular dentro de tfs .. ¿Cómo sería posible esto en C#?listando todos los contenidos de una carpeta en tfs

Respuesta

6

estoy asumiendo que usted quiere 'contenido de la carpeta de conjunto de cambios X' y no 'contenido de la carpeta que formaban parte del conjunto de cambios X'

GetIte ms es la decisión correcta de usar, sólo tiene que pasar en una especificación de versión para el conjunto de cambios que le interesa

http://msdn.microsoft.com/en-US/library/bb138911.aspx

así, suponiendo que ya tiene una referencia a la instancia VersionControlServer:.

var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full); 

Si entendí mal y desea 'contenido de la carpeta que formaba parte del conjunto de cambios X', hay algunas maneras diferentes de hacerlo, pero obtener el conjunto de cambios con GetChangeset y simplemente filtrar el Changes es bastante simple.

+0

No tenía conocimiento de la especificación de la versión. Esto es lo que yo quería. Gracias... – Sidd

-1

Puede usar el servicio web changeset para obtener un documento XML que contenga todos los elementos modificados para un conjunto de cambios en particular. A continuación, recorra la lista de elementos modificados y vea si están en la ruta que está buscando.

Aquí está el URL para el servicio web de cambios:

http: // your_tfs_server /VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number & web View = true

+0

¿puedo hacer un VersionControlServer.getItems() y recorrer el conjunto derivado? Lo estoy probando ahora ... – Sidd

+0

Votación descendente (perdón David). No debe usar el servicio web para hacer esto en circunstancias (normales). Estos son internos y pueden cambiar sin previo aviso. – Robaticus

2

Algo como esto podría ser más lo que estás buscando para. Esto obtiene todos los cambios en un conjunto de cambios y los itera a través de ellos, identificando los que están en la ruta dada. Esto podría ser acortado con una consulta LINQ, pero lo estoy dejando un poco más ampliado para dar la esencia de lo que estoy tratando de decir:

TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService<VersionControlServer>(); 

    Changeset cs = vcs.GetChangeset(6284868); 

    foreach (Change change in cs.Changes) 
    { 
     if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src")) 
     { 
      System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}", 
       cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString())); 
     } 
    } 
+0

Gracias .. Pero no necesito los elementos en un conjunto de cambios en particular. Necesito todos los archivos y carpetas debajo de una carpeta dada en tfs. – Sidd

+1

Luego puedes usar GetItems() ... aunque tu pregunta menciona el conjunto de cambios. – Robaticus

0

creo que algo como esto funcionaría ..


    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService(); 
    ItemSet items; 

    items = vcs.GetItems(tfsPath, RecursionType.Full); 

Si tiene alguna otra idea, por favor publicarlos ..

+0

su código falta la parte donde define tfsPath para pasar a GetItems –

Cuestiones relacionadas