Domanda

Sto cercando di capire come ottenere il messaggio di commit per una particolare revisione. Sembra SvnLookClient è probabilmente quello che mi serve

Ho trovato un certo codice qui sul SO che assomiglia a quello che mi serve, ma mi sembra che manchi qualcosa ..

Codice ho trovato (qui su così):

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

    }
}
È stato utile?

Soluzione

Il client svnlook è specificamente mirati per l'utilizzo di ganci repository. Permette l'accesso a revisioni uncommited ed ha quindi bisogno di altri argomenti. (E 'l'equivalente SharpSvn del comando 'svnlook'. Se avete bisogno di un equivalente 'svn' si dovrebbe guardare a SvnClient).

Un origine sguardo quando è:   * Un percorso di repository e un nome di transazione   * O un percorso di repository e un numero di revisione

es. in un pre-commit hook la revisione non è ancora impegnato, quindi non è possibile accedere sopra l'URL pubblico, come si farebbe normalmente.

La documentazione dice (in 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 vi aiuta offrendo:

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

Il che analizza questi argomenti per voi. (Che in questo caso è molto semplice, ma ci sono i ganci più avanzati .. E ganci può ricevere nuovi argomenti nelle versioni Subversion più recenti). Il valore che vi serve è nella proprietà .LookOrigin di ettari.

Se si vogliono solo avere il messaggio di log per una gamma revisione specifica (1234-4567) non si dovrebbe guardare lo 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))
}

Altri suggerimenti

Cordiali saluti, ho fatto una funzione di C # in base alla risposta di Bert. Grazie 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, penso di avere il codice per questo, vi posterò più tardi. SharpSVN ha un (IMHO) API probabilmente confusione.

Penso che si desidera log (di SvnClient), o simili, passando nella revisione che stai cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top