Come posso visualizzare le modifiche apportate dopo il commit di una revisione e analizzarle per i commenti?
Domanda
Speravo di automatizzare alcune attività relative a SubVersion, quindi ho SharpSvn. Purtroppo non riesco a trovare molta documentazione per questo.
Voglio essere in grado di visualizzare le modifiche dopo che un utente ha eseguito una nuova revisione in modo da poter analizzare il codice per commenti speciali che possono essere caricati nel mio sistema di ticket.
Soluzione
Se vuoi semplicemente navigare su SharpSvn puoi usare http://docs.sharpsvn.net/ . La documentazione è tutt'altro che completa in quanto l'attenzione è principalmente sulla fornitura di funzionalità. Qualsiasi aiuto per migliorare la documentazione (o SharpSvn stesso) è il benvenuto ;-)
Per utilizzare i messaggi di registro per il tracker dei problemi, puoi utilizzare due percorsi:
- Un hook post-commit che elabora le modifiche una alla volta
- Un servizio programmato che chiama 'svn log -r < last-recupered >: HEAD' ogni tanto.
Le ultime build giornaliere di SharpSvn hanno un po 'di supporto per gli hook di commit, ma quella parte non è ancora api-stabile.
È possibile creare un hook post commit (post-commit.exe) con:
static void Main(string[] args)
{
SvnHookArguments ha;
if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PostCommit, false, out ha))
{
Console.Error.WriteLine("Invalid arguments");
Environment.Exit(1);
}
using (SvnLookClient cl = new SvnLookClient())
{
SvnChangeInfoEventArgs ci;
cl.GetChangeInfo(ha.LookOrigin, out ci);
// ci contains information on the commit e.g.
Console.WriteLine(ci.LogMessage); // Has log message
foreach(SvnChangeItem i in ci.ChangedPaths)
{
//
}
}
}
(Per una soluzione completa dovresti anche agganciare il post-revprop-change, poiché i tuoi utenti potrebbero cambiare il messaggio di log dopo il primo commit)
Altri suggerimenti
Mi chiedo se gli hook di sovversione (sul server svn) potrebbero non essere un altro approccio qui? Non l'ho provato, ma CaptainHook sembra offrire svn - > integrazione hook .NET.