2011-12-13 17 views
15

necesito para crear dos métodos de la siguiente manera:TFS 2010: Obtención de lista de ID de conjunto de cambios

  1. Recuperación de todos los conjuntos de cambios en TFS.
  2. Recupera todos los conjuntos de cambios más nuevos que un conjunto de cambios especificado.

He hecho algunas búsquedas en Google y he encontrado algunos enlaces y he logrado encontrar algún código. Parece que no puedo calcular el método para llamar para obtener la lista completa de elementos de conjunto de cambios. He FALLIDO algo juntos para conseguir esto, pero me preguntaba si alguien me puede ayudar:

TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://mydomain.com:8080/tfs")); 
VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>(); 
int latestId = versionControl.GetLatestChangesetId(); 

List<Changeset> changesetList = new List<Changeset>(); 
for (int i = 1; i < latestId; i++) 
{ 
    try 
    { 
     Changeset cs = versionControl.GetChangeset(i); 
     if (cs != null) 
     { 
      changesetList.Add(cs); 
     } 
    } 
    catch (ResourceAccessException) 
    { 
    } 
} 

Conseguir el conjunto de cambios de un documento de identidad de una excepción de 'ResourceAccessException' por lo que el controlador ha sido añadido.

¿Alguna idea sobre cómo hacer esto de la manera "correcta"?

Estoy usando Visual Studio 2010 con TFS 2010. La aplicación se está escribiendo en C# como una aplicación .Net 4.0.

TIA

+0

Suena como un problema de permiso de usuario. ¿Has probado la sobrecarga para GetTeamProjectCollection a la que puedes pasar credenciales de usuario? De lo contrario, usará las credenciales del usuario que ejecuta el código. – Strillo

+1

La forma en que @Morten ha propuesto debería funcionar para usted. Su falla puede ser causada por conjuntos de cambios eliminados (http://msdn.microsoft.com/en-us/library/bb386005.aspx). Marcaría los que fallaran y buscaré en Source Control Explorer qué tiene de especial. – pantelif

Respuesta

25

Prueba esto:

// Replace with your setup 
    var tfsServer = @"http://tfsserver:8080/tfs/SW"; 
    var serverPath = @"$/PCSW/ProjectX/Main"; 

    // Connect to server 
    var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer)); 
    tfs.Connect(ConnectOptions.None); 
    var vcs = tfs.GetService<VersionControlServer>(); 

    // Create versionspec's. Example start with changeset 529 
    VersionSpec versionFrom = VersionSpec.ParseSingleSpec("C529", null); 
    // If you want all changesets use this versionFrom: 
    // VersionSpec versionFrom = null; 
    VersionSpec versionTo = VersionSpec.Latest; 

    // Get Changesets 
    var changesets = vcs.QueryHistory(
    serverPath, 
    VersionSpec.Latest, 
    0, 
    RecursionType.Full, 
    null, 
    versionFrom, 
    versionTo, 
    Int32.MaxValue, 
    true, 
    false 
    ).Cast<Changeset>(); 
+3

Para obtener el repositorio completo, use esto: var serverPath = @ "$ /"; Si solo desea una parte del repositorio, seleccione la ruta que se muestra en "Source Control Explorer". –

+0

Si deseo obtener todos los cambios no para una fecha específica, ¿qué cambios se requieren en una solución completa? – Meraj

1

En caso de que sea sólo los números del conjunto de cambios en la gama que se requiere, el siguiente código se puede utilizar.

foreach (var changeset in changesets) 
{ 
    Console.WriteLine(changeset.ChangesetId); 
} 
Cuestiones relacionadas