Pregunta

Estoy tratando de encontrar la manera de hacer llegar el mensaje de confirmación para un revisión en particular. Parece que SvnLookClient es probablemente lo que necesito

He encontrado algo de código aquí el fin de que se parece a lo que necesito, pero me parece que falta algo ..

Código encontré (en este caso el modo):

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 e.g.
    Console.WriteLine(ci.LogMessage); // Has log message

    foreach (SvnChangeItem i in ci.ChangedPaths)
    {

    }
}
¿Fue útil?

Solución

El cliente svnlook se va dirigida específicamente para el uso en ganchos de repositorio. Permite el acceso a las revisiones uncommited y por lo tanto necesita otros argumentos. (Es el equivalente SharpSvn del comando 'svn'. Si usted necesita un equivalente 'svn' usted debe buscar en SvnClient).

Una mirada origen puede ser:   * Un repositorio ruta y un nombre de transacción   * O una ruta de repositorio y un número de revisión

por ejemplo. en un gancho pre-commit de la revisión no se ha comprometido todavía, por lo que no se puede acceder a él a través de la URL pública, al igual que lo haría.

La documentación 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 ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] TXN-NAME     (the name of the txn about to be committed)

SharpSvn le ayuda al ofrecer:

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

¿Qué analiza estos argumentos para usted. (Que en este caso es muy simple, pero hay ganchos más avanzados .. Y ganchos puede recibir nuevos argumentos en las últimas versiones de Subversion). El valor que necesita está en la propiedad de .LookOrigin ha.

Si lo que desea es tener el mensaje de registro para un rango específico de revisión (1234-4567) no se debe buscar en el 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))
}

Otros consejos

Para su información, he hecho una función de C # basado 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;
}

Si no, creo que tengo el código para esto, voy a publicar más adelante. SharpSVN tiene una discutible (mi humilde opinión) confuso API.

Creo que quieres .Log (de SvnClient), o similares, que pasa en la revisión que está buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top