2011-01-21 31 views
8

Estoy tratando de averiguar cómo obtener una lista de archivos de una carpeta específica ("$/theproject/trunk/setup /") en TFS sin ponerlos en la carpeta local.Obtener una lista de archivos de TFS

Hasta ahora he conseguido conectar, crear un espacio de trabajo y una carpeta de trabajo:

 var server = RegisteredTfsConnections.GetProjectCollection(new Uri("http://hostname:8080/")); 
     var projects = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(server); 
     var versionControl = (VersionControlServer)projects.GetService(typeof(VersionControlServer)); 

     var workspace = versionControl.CreateWorkspace(AppDomain.CurrentDomain.FriendlyName + "-installer", versionControl.AuthorizedUser); 
     try 
     { 
      WorkingFolder folder = new WorkingFolder("$/theproject/trunk/setup/", "C:\\aTempFolder"); 
      workspace.CreateMapping(folder); 

      //this would get all files to the local folder, right? 
      //what should I do instead to just get a file list? 
      workspace.Get(); 

     } 
     finally 
     { 
      workspace.Delete(); 
     } 

Respuesta

14

Se hace así:

 var server = RegisteredTfsConnections.GetProjectCollection(new Uri("http://hostname:8080/")); 
     var projects = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(server); 
     var versionControl = (VersionControlServer)projects.GetService(typeof(VersionControlServer)); 

     var newestDate = DateTime.MinValue; 
     Item newestItem = null; 
     var items = versionControl.GetItems("$/theproject/trunk/setup/*.msi"); 
     foreach (var item in items.Items) 
     { 
      if (item.ItemType != ItemType.File) 
       continue; 

      if (item.CheckinDate > newestDate) 
      { 
       newestItem = item; 
       newestDate = item.CheckinDate; 
      } 
     } 
     newestItem.DownloadFile("C:\\temp\\" + Path.GetFileName(newestItem.ServerItem)); 
+1

+ 1 para el código completo. Podría usar esto yo mismo. – nik0lias

+0

Referencias: "Microsoft.TeamFoundation.Client" y "Microsoft.TeamFoundation.VersionControl.Client" – ftexperts

+1

Necesita agregar RecursionType.Full como parámetro para el método GetItems; de lo contrario, no trae elementos de la subcarpeta. –

7

Prueba esto:

ItemSet items = versionControl.GetItems(folder.ServerItem, RecursionType.Full); 
+0

Hubiera aceptado su respuesta si la hubiera agregado antes que la mía (o si hubiera sido más detallada). Ahora solo tienes +1. – jgauffin

+0

gracias, tuve que comprobarlo contra tfs antes de publicar :) – frennky

Cuestiones relacionadas