2011-12-13 14 views
15

ho bisogno di creare due modi, come segue:TFS 2010: Ottenere l'elenco dei changeset Ids

  1. Recupero di tutti i gruppi di modifiche in TFS.
  2. Recupera tutti i changeset più recenti di un changeset specificato.

Ho fatto qualche ricerca su google e ho trovato alcuni collegamenti e sono riuscito a trovare un po 'di codice. Non riesco a capire il metodo da chiamare per ottenere l'elenco completo degli elementi del changeset. Ho impasticciato qualcosa insieme per ottenere questo, ma chiedevo se qualcuno mi può aiutare:

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) 
    { 
    } 
} 

Ottenere l'insieme di modifiche per un po 'Id del genera un'eccezione 'ResourceAccessException', che è il motivo per cui è stato aggiunto il gestore.

Qualche idea su come farlo nel modo "corretto"?

Utilizzo Visual Studio 2010 con TFS 2010. L'applicazione viene scritta in C# come app .Net 4.0.

TIA

+0

Sembra un problema di autorizzazione dell'utente. Hai provato il sovraccarico di GetTeamProjectCollection a cui puoi passare le credenziali dell'utente? Altrimenti utilizzerà le credenziali dell'utente che esegue il codice. – Strillo

+1

Il modo in cui @Morten ha proposto dovrebbe funzionare per te. L'errore potrebbe essere causato da changeset eliminati (http://msdn.microsoft.com/en-us/library/bb386005.aspx). Contrassegnerei i falliti e andrò a cercare in Source Control Explorer cosa c'è di così speciale in loro. – pantelif

risposta

25

Prova questo:

// 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

Per ottenere il repository completo utilizzare questo: var serverPath = @ "$ /"; Se si desidera solo una parte del repository, selezionare il percorso mostrato in "Source Control Explorer". –

+0

Se desidero ottenere tutti i set di modifiche non per una data specifica, quali modifiche sono necessarie in una soluzione appropriata? – Meraj

1

Nel caso in cui si tratta di solo i numeri changeset della gamma che sono necessari, può essere utilizzato il seguente codice.

foreach (var changeset in changesets) 
{ 
    Console.WriteLine(changeset.ChangesetId); 
} 
Problemi correlati