2015-07-21 9 views
6

Sto cercando di implementare un plug-in per Team Foundation Server 2010 che creerà report sugli utenti in un progetto team. Concettualmente, tutto ciò di cui ho bisogno per implementare correttamente questo plug-in è l'accesso agli stessi dati che si ottengono quando si utilizza la funzionalità "Annotazione" in Visual Studio: Devo essere in grado di dire chi è stata l'ultima persona a creare un determinato linea di codice.Dati TAP (annotazione) a livello di codice programmabile

Ho perlustrato internet per i campioni di documentazione o di codice, ma tutto quello che posso trovare sono o suggerimenti come using the TFS command-line tools o apparentemente incompleti code samples.

non mi dispiace fare un sacco di sollevamento di carichi pesanti nel codice client, ma non sembra essere un modo ovvio per ottenere i dati d'autore utili sulle contenuti del codice in un Changeset, né dalla il ritorno merge details.

risposta

3

Intanto ho trovato una soluzione di lavoro che esegue Team Foundation Power Tools processo e analizza la sua uscita:

private readonly Regex m_Regex = new Regex(@"^(?<changeset>\d+)(?<codeLine>.*)", RegexOptions.Compiled | RegexOptions.Multiline); 

public List<Changeset> GetAnnotations(string filepath, string codeText) 
    { 
     var versionControlServer = CreateVersionControlServer(); 

     return m_Regex.Matches(ExecutePowerTools(filepath)) 
      .Cast<Match>() 
      .Where(m => m.Groups["codeLine"].Value.Contains(codeText)) 
      .Select(v => versionControlServer.GetChangeset(int.Parse(v.Groups["changeset"].Value), false, false)) 
      .ToList(); 
    } 

    private static VersionControlServer CreateVersionControlServer() 
    { 
     var projectCollection = new TfsTeamProjectCollection(new Uri(@"TFS URL")); 
     var versionControlServer = projectCollection.GetService<VersionControlServer>(); 
     return versionControlServer; 
    } 

    private static string ExecutePowerTools(string filepath) 
    { 
     using (var process = Process.Start(TfptLocation, string.Format("annotate /noprompt {0}", filepath))) 
     { 
      process.WaitForExit(); 
      return process.StandardOutput.ReadToEnd(); 
     } 
    } 
+1

Ho appena implementato questo e non ti dice il proprietario di ogni riga, solo il changeset e il codice ... – im1dermike

+0

@ im1dermike, hai ragione. E 'stato abbastanza buono per il mio caso d'uso. –

0

avevo requisito molto simile a ottenere dettagli di particolare attributo in un file di esempio chi ha aggiunto, quando, articoli di lavoro correlati ecc .; A seguito del progetto GitHub sta avendo implementazione per ottenere i dati richiesti e ha richiesto modifiche minime al lavoro-

SonarQube SCM TFVC plugin

Si richiede analisi che deve essere eseguito da macchine Windows con il Team Foundation Object Server installato (download per TFS 2013) del modello.

Problemi correlati