svn - 在 Windows 中为 subversion 编写钩子(Hook)的最佳策略

标签 svn hook svn-hooks

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




最好的写作方法是什么 Hook 对于 颠覆 window ?据我所知,只能使用可执行文件。那么最好的选择是什么?

  • 普通的批处理文件(非常有限,但对于非常简单的解决方案可能还可以)
  • 专用的编译可执行应用程序(大锤破解简而言之?)
  • 其他一些混合选择(例如运行 Powershell 脚本的批处理文件)
  • 最佳答案

    我刚刚在这个问题上拖延了几天。有可用的第三方产品和大量的 PERL 和 Python 脚本,但我想要一些简单的东西和我熟悉的语言,所以最终只是在 C# 控制台应用程序中编写 Hook 。这非常简单:

    public void Main(string[] args)
    {
      string repositories = args[0];
      string transaction = args[1];
    
      var processStartInfo = new ProcessStartInfo
                               {
                                 FileName = "svnlook.exe",
                                 UseShellExecute = false,
                                 CreateNoWindow = true,
                                 RedirectStandardOutput = true,
                                 RedirectStandardError = true,
                                 Arguments = String.Format("log -t \"{0}\" \"{1}\"", transaction, repositories)
                               };
    
      var p = Process.Start(processStartInfo);
      var s = p.StandardOutput.ReadToEnd();
      p.WaitForExit();
    
      if (s == string.Empty)
      {
        Console.Error.WriteLine("Message must be provided");
        Environment.Exit(1);
      }
    
      Environment.Exit(0);
    }
    

    然后,您可以通过将 pre-commit.cmd 文件添加到 repo 的 hooks 文件夹中,使用以下行在预提交时调用它:
    [path]\PreCommit.exe %1 %2
    

    您可能会认为这有点过头了,但最终只需要几分钟的编码。更重要的是,您可以获得 .NET 语言套件的优势,恕我直言,它比其他语言套件更可取。我将显着扩展我的钩子(Hook)并针对它们编写适当的测试 - 使用 DOS 批处理文件很难做到这一点!

    顺便说一句,代码已改编自 this post .

    关于svn - 在 Windows 中为 subversion 编写钩子(Hook)的最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134/

    相关文章:

    svn - 重新组织存储库后,难以将分支合并到主干中

    Svn 错误 "Previous operation has not finished"

    git - 始终跳过链接到自定义脚本的 npm 安装的预推送 Hook

    windows - 如何识别应用程序打算执行/运行文件?

    linux - 正则表达式适用于 Regex101 但不适用于 bash

    java - Mercurial v Git v 颠覆

    c++ - libsvn - svn_pool_create() - Unresolved external 问题

    svn - pre-revprop-change 钩子(Hook)要么失败

    svn - 在 SVN 提交后 Hook 中节省时间?

    windows - 在 Windows bat 文件中运行另一个程序而不创建子进程