問題

在Windows中為Subversion編寫鉤子的最佳方法是什麼?據我所知,只能使用可執行檔案.那麼最好的選擇是什麼?

  • 普通批處理檔案(非常有限但對於非常簡單的解決方案也許可以)
  • 專用編譯的可執行應用程式(sledgehammer to fract a nutshell?)
  • 其他一些混合選擇(如執行Powershell指令碼的批處理檔案)

  最佳答案

我剛剛花了幾天時間拖延這個問題.有第三方產品可用,有很多PERL和Python指令碼,但我想要一些簡單的語言,我熟悉的語言,所以最終只是在C#控制檯應用程式中編寫鉤子.這是非常直接的:

 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的鉤子資料夾,其中包含以下行:

 [path]\PreCommit.exe %1 %2
 

您可能會考慮這種過度殺傷,但最終只有幾分鐘的編碼.此外,您獲得了IMHO比替代方案更可取的.NET語言套件的優勢.我會大大擴充套件我的鉤子並對它們編寫適當的測試 – 使用DOS批處理檔案執行此操作有點困難!

順便說一句,程式碼是從這篇文章調整的。

  相同標籤的其他問題

svnhooksvn-hooks