Question

Je suis en train de comprendre comment obtenir le message de validation pour une révision particulière. On dirait que SvnLookClient est probablement ce que je dois

J'ai trouvé un code ici sur le SO qui ressemble à ce que je dois, mais il me semble manquer quelque chose ..

Code I trouvé (ici donc):

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

    }
}
Était-ce utile?

La solution

Le client svnlook est spécifiquement pour cible pour l'utilisation dans des crochets de stockage. Il permet d'accéder à des révisions UNCOMMITED et a donc besoin d'autres arguments. (Il est l'équivalent SharpSvn de la commande « svnlook ». Si vous avez besoin d'un équivalent « svn » vous devriez regarder SvnClient).

Une origine de regard est:   * Un chemin du référentiel et un nom de transaction   * Ou un chemin de référentiel et un numéro de révision

par exemple. dans un crochet pre-commit la révision n'est pas encore engagé, vous ne pouvez pas accéder via l'URL publique, comme vous le feriez normalement.

La documentation dit (en pré-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 vous aide en offrant:

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

Quels sont ces arguments parse pour vous. (Qui dans ce cas est très simple, mais il y a des crochets plus avancés .. Et crochets peuvent recevoir de nouveaux arguments dans les versions Subversion plus récentes). La valeur dont vous avez besoin est dans la propriété de .LookOrigin ha.

Si vous voulez juste avoir le message de journal pour une gamme spécifique de révision (1234-4567) vous ne devriez pas regarder le 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))
}

Autres conseils

Pour votre information, j'ai fait une fonction C # en fonction de la réponse de Bert. Merci 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;
}

Ouais non, je pense avoir le code pour cela, je vais le poster plus tard. SharpSVN a un doute (à mon humble avis) API source de confusion.

Je pense que vous voulez .LOG (de SvnClient), ou similaire, en passant dans la révision que vous êtes après.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top