SharpSVN ottenere post-commit-gancio con 'SvnLookClient'
-
12-09-2019 - |
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)
{
}
}
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.