【问题标题】:SharpSVN get post-commit-hook with 'SvnLookClient'SharpSVN 使用“SvnLookClient”获得提交后挂钩
【发布时间】:2009-08-11 02:20:49
【问题描述】:

我试图弄清楚如何获取特定修订的提交消息。看起来 SvnLookClient 可能是我需要的

我在 SO 上找到了一些看起来像我需要的代码,但我似乎遗漏了一些东西..

我找到的代码(在这里):

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

    }
}

【问题讨论】:

    标签: c# svn post-commit sharpsvn


    【解决方案1】:

    SvnLook 客户端专门针对在存储库挂钩中使用。它允许访问未提交的修订,因此需要其他参数。 (它是 'svnlook' 命令的 SharpSvn 等效项。如果您需要 'svn' 等效项,您应该查看 SvnClient)。

    外观来源是: * 存储库路径和事务名称 * 或存储库路径和修订号

    例如在预提交挂钩中,修订尚未提交,因此您无法像通常那样通过公共 url 访问它。

    文档说(在 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 通过以下方式帮助您:

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

    它会为您解析这些参数。 (在这种情况下非常简单,但是有更高级的钩子。并且钩子可以在较新的 Subversion 版本中接收新参数)。您需要的值在 ha 的 .LookOrigin 属性中。

    如果您只想获取特定修订范围 (1234-4567) 的日志消息,则不应查看 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))
    }
    

    【讨论】:

      【解决方案2】:

      仅供参考,我根据 Bert 的回复制作了一个 C# 函数。谢谢伯特!

      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;
      }
      

      【讨论】:

        【解决方案3】:

        是的,我想我有这个的代码,我稍后会发布它。 SharpSVN 有一个可以说(恕我直言)令人困惑的 API。

        我认为您希望 .Log(SvnClient 的)或类似文件传入您所追求的修订版。

        【讨论】:

        • SvnLookClient 是等效于“svnlook”应用程序的库。这个类是为使用来自存储库的钩子而设计的(就像 svnlook)。
        猜你喜欢
        • 2010-11-09
        • 2015-09-10
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        相关资源
        最近更新 更多