Tôi vừa dành vài ngày trì hoãn chính xác câu hỏi này. Có các sản phẩm của bên thứ ba có sẵn và nhiều kịch bản PERL và Python nhưng tôi muốn một cái gì đó đơn giản và một ngôn ngữ tôi đã quen thuộc với vì vậy cuối cùng chỉ cần viết móc trong một ứng dụng giao diện điều khiển C#. Nó rất thẳng về phía trướ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);
}
Sau đó bạn có thể gọi này vào trước cam kết bằng cách thêm một tập tin trước commit.cmd vào thư mục móc của repo với dòng sau:
[path]\PreCommit.exe %1 %2
Bạn có thể xem xét điều này quá mức cần thiết nhưng cuối cùng nó chỉ là một vài phút mã hóa. Hơn nữa, bạn có được lợi thế của bộ ngôn ngữ .NET mà IMHO thích hợp hơn với các lựa chọn thay thế. Tôi sẽ mở rộng các móc của mình ra một cách đáng kể và viết các bài kiểm tra thích hợp với chúng - một chút khó để làm điều này với một tệp lô DOS!
BTW, mã đã được điều chỉnh từ this post.
Nguồn
2009-07-29 07:03:06
đảm bảo có được các tập tin vá lỗi quá. Nó sửa lỗi 2x lỗi –