SharpSVN obtiene post-commit-hook con 'SvnLookClient'

Estoy tratando de averiguar cómo get el post de compromiso para una revisión en particular. Parece que SvnLookClient es probablemente lo que necesito

Encontré un código aquí en SO que se parece a lo que necesito, pero parece que me falta algo.

Código que encontré (aquí en tanto):

using (SvnLookClient cl = new SvnLookClient()) { SvnChangeInfoEventArgs ci; //******what is lookorigin? do I pass the revision here?? cl.GetChangeInfo(ha.LookOrigin, out ci); // ci contains information on the commit eg Console.WriteLine(ci.LogMessage); // Has log message foreach (SvnChangeItem i in ci.ChangedPaths) { } } 

El cliente SvnLook está específicamente diseñado para usarlo en los enganches del repository. Permite el acceso a revisiones sin compromiso y, por lo tanto, necesita otros arguments. (Es el equivalente de SharpSvn del command 'svnlook'. Si necesita un equivalente 'svn', debe mirar a SvnClient).

Un origen de búsqueda es: * Una ruta de repository y un nombre de transacción * o una ruta de repository y un número de revisión

Por ejemplo, en un enlace de precompromiso, la revisión aún no se ha confirmado, por lo que no puede acceder a ella a través de la url pública, como lo haría normalmente.

La documentation dice (en pre-commit.tmpl):

 # The pre-commit hook is invoked before a Subversion txn is # committed. Subversion runs this hook by invoking a program # (script, executable, binary, etc.) named 'pre-commit' (for which # this file is a template), with the following ordenetworking arguments: # # [1] REPOS-PATH (the path to this repository) # [2] TXN-NAME (the name of the txn about to be committed) 

SharpSvn te ayuda ofreciendo:

 SvnHookArguments ha; if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PostCommit, false, out ha)) { Console.Error.WriteLine("Invalid arguments"); Environment.Exit(1); } 

Que analiza estos arguments para ti. (Que en este caso es muy simple, pero hay ganchos más avanzados … Y los ganchos pueden recibir nuevos arguments en las versiones más nuevas de Subversion). El valor que necesita está en la propiedad .LookOrigin de ha.

Si solo desea tener el post de logging para un range de revisión específico (1234-4567), no debe mirar al SvnLookClient.

 using(SvnClient cl = new SvnClient()) { SvnLogArgs la = new SvnLogArgs(); Collection<SvnLogEventArgs> col; la.Start = 1234; la.End = 4567; cl.GetLog(new Uri("http://svn.collab.net/repos/svn"), la, out col)) } 

FYI, hice una function C # basada en la respuesta de Bert. Gracias Bert!

 public static string GetLogMessage(string uri, int revision) { string message = null; using (SvnClient cl = new SvnClient()) { SvnLogArgs la = new SvnLogArgs(); Collection<SvnLogEventArgs> col; la.Start = revision; la.End = revision; bool gotLog = cl.GetLog(new Uri(uri), la, out col); if (gotLog) { message = col[0].LogMessage; } } return message; } 

Sí, no, creo que tengo el código para esto, lo publicaré más tarde. SharpSVN tiene una API confusa (IMHO) confusa.

Creo que quieres .Log (de SvnClient), o similar, pasando la revisión que estás buscando.