Frage

ich sehe, dass alles, was ich einstellen kann, ist% repos% und% TXN%

Wie kann ich diejenigen, die bekommen Nachricht begehen (in meinem Fall, so dass ich die Ticketnummer parsen kann, so kann ich sehen, ob es in der Bug-Datenbank vorhanden ist, bevor Sie handeln)

War es hilfreich?

Lösung

Mit einem letzten SharpSvn

verwenden können, loslassen
SvnHookArguments ha; 
if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PreCommit, false, out ha))
{
    Console.Error.WriteLine("Invalid arguments");
    Environment.Exit(1);  
}

die Argumente eines pre-commit Haken zu analysieren und dann mit

using (SvnLookClient cl = new SvnLookClient())
{
    SvnChangeInfoEventArgs ci;

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

    }
}

in der Log-Nachricht erhalten, geänderte Dateien, etc.

Andere Tipps

Ich weiß nicht, SharpSvn, aber wenn Sie einen Haken Skript erstellen, wie Sie beschreiben, erhalten Sie als Argument% repos% und% TXN%

Mit diesen Daten können Sie die Transaktion prüfen (% TXN%) des gegebenen Repository. Normalerweise Sie tun dies, indem mit

svnlook -t %txn%  %repo%

Dann werden Sie die Log-Meldung.

So können Sie für ein Äquivalent zu svnlook in SharpSvn Schnittstelle aussehen sollte.

Vor einiger Zeit mir einen C # Wrapper für die svnlook.exe geschrieben habe. Ich habe diese eine Nachricht an ein Bug-Tracker zu begehen zu senden (wenn eine Ticket-ID zur Verfügung gestellt wurde). Finden Sie es unten, vielleicht ist es nützlich für Sie.

/// <summary>
/// Encapsulates the SVNLook command in all of it's flavours
/// </summary>
public static class SvnLookCommand
{
    /// <summary>
    /// The string &quot;&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string AUTHOR = "author";

    /// <summary>
    /// The string &quot;cat&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string CAT = "cat";

    /// <summary>
    /// The string &quot;changed&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string CHANGED = "changed";

    /// <summary>
    /// The string &quot;date&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string DATE = "date";

    /// <summary>
    /// The string &quot;diff&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string DIFF = "diff";

    /// <summary>
    /// The string &quot;dirs-changed&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string DIRSCHANGED = "dirs-changed";

    /// <summary>
    /// The string &quot;history&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string HISTORY = "history";

    /// <summary>
    /// The string &quot;info&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string INFO = "info";

    /// <summary>
    /// The string &quot;lock&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string LOCK = "lock";

    /// <summary>
    /// The string &quot;log&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string LOG = "log";

    /// <summary>
    /// The string &quot;tree&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string TREE = "tree";

    /// <summary>
    /// The string &quot;uuid&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string UUID = "uuid";

    /// <summary>
    /// The string &quot;youngest&quot; used as parameter for the svnlook.exe
    /// </summary>
    private static readonly string YOUNGEST = "youngest";

    /// <summary>
    /// The full path of the svnlook.exe binary
    /// </summary>
    private static string commandPath = String.Empty;

    /// <summary>
    /// Initializes static members of the <see cref="SvnLookCommand"/> class.
    /// </summary>
    static SvnLookCommand()
    {
        commandPath = Settings.Default.SvnDirectoryPath;

        if (!Path.IsPathRooted(commandPath))
        {
            Assembly entryAssembly = Assembly.GetEntryAssembly();
            if (entryAssembly != null)
            {
                commandPath = new FileInfo(entryAssembly.Location).Directory.ToString() + Path.DirectorySeparatorChar + commandPath;
            }
        }

        if (!commandPath.EndsWith(Path.DirectorySeparatorChar.ToString()))
        {
            commandPath = commandPath + Path.DirectorySeparatorChar;
        }

        commandPath += "svnlook.exe";
    }

    /// <summary>
    /// Gets the process info to start a svnlook.exe command with parameter &quot;author&quot;
    /// </summary>
    /// <param name="repository">The repository.</param>
    /// <param name="revision">The revision.</param>
    /// <returns>Gets the author of the revision in scope</returns>
    public static ProcessStartInfo GetAuthor(string repository, string revision)
    {
        ProcessStartInfo svnLookProcessStartInfo = new ProcessStartInfo(commandPath);
        svnLookProcessStartInfo.Arguments = String.Format("{0} {1} -r {2}", AUTHOR, repository, revision);
        return svnLookProcessStartInfo;
    }

    /// <summary>
    /// Gets the process info to start a svnlook.exe command with parameter &quot;log&quot;
    /// </summary>
    /// <param name="repository">The repository.</param>
    /// <param name="revision">The revision.</param>
    /// <returns>The svn log of the revision in scope</returns>
    public static ProcessStartInfo GetLog(string repository, string revision)
    {
        ProcessStartInfo svnLookProcessStartInfo = new ProcessStartInfo(commandPath);
        svnLookProcessStartInfo.Arguments = String.Format("{0} {1} -r {2}", LOG, repository, revision);
        return svnLookProcessStartInfo;
    }

    /// <summary>
    /// Gets the process info to start a svnlook.exe command with parameter &quot;changed&quot;
    /// </summary>
    /// <param name="repository">The repository.</param>
    /// <param name="revision">The revision.</param>
    /// <returns>The change log of the revision in scope</returns>
    public static ProcessStartInfo GetChangeLog(string repository, string revision)
    {
        ProcessStartInfo svnLookProcessStartInfo = new ProcessStartInfo(commandPath);
        svnLookProcessStartInfo.Arguments = String.Format("{0} {1} -r {2}", CHANGED, repository, revision);
        return svnLookProcessStartInfo;
    }

    /// <summary>
    /// Gets the process info to start a svnlook.exe command with parameter &quot;info&quot;
    /// </summary>
    /// <param name="repository">The repository.</param>
    /// <param name="revision">The revision.</param>
    /// <returns>The info of the revision in scope</returns>
    public static ProcessStartInfo GetInfo(string repository, string revision)
    {
        ProcessStartInfo svnLookProcessStartInfo = new ProcessStartInfo(commandPath);
        svnLookProcessStartInfo.Arguments = String.Format("{0} {1} -r {2}", INFO, repository, revision);
        return svnLookProcessStartInfo;
    }
}

Ich habe gerade durch den Prozess gegangen baut ein Haken App selbst und SharpSvn ist nicht erforderlich, für Nachrichten zu begehen suchen. Angenommen, Sie haben sich eine Konsole App bereits gebaut, versuchen Sie diesen Code, die Anrufe svnlook.exe direkt:

string repos = args[0];
string txn = args[1];

var processStartInfo = new ProcessStartInfo
{
  FileName = "svnlook.exe",
  UseShellExecute = false,
  CreateNoWindow = true,
  RedirectStandardOutput = true,
  RedirectStandardError = true,
  Arguments = String.Format("log -t \"{0}\" \"{1}\"", txn, repos)
};

Process process = Process.Start(processStartInfo);
string message = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return message;

Stellen Sie sicher, dass die Lage von svnlook.exe auf den Pfad Umgebungsvariable Ihre Maschine gegeben, so kann die oben von jedem Ort ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top