2008-08-07 25 views
17

phương pháp tốt nhất để viết móc cho Subversion trong của Windows là gì? Theo tôi biết, chỉ có thể sử dụng các tệp thi hành được. Vì vậy, sự lựa chọn tốt nhất là gì?chiến lược tốt nhất để viết móc cho lật đổ trong Windows

  • các tập tin batch Plain (rất hạn chế nhưng có lẽ OK cho các giải pháp rất đơn giản)
  • chuyên dụng biên soạn các ứng dụng thực thi (sledgehammer để crack một Tóm?)
  • Một số lựa chọn hybrid khác (như một tập tin batch chạy một Powershell script)

Trả lời

6

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.

1

Tùy thuộc vào độ phức tạp, mỗi tình huống là khác nhau, Nếu tôi chỉ đơn giản là di chuyển các tập tin xung quanh, tôi sẽ viết một tập tin thực thi nhanh. Nếu tôi muốn làm một cái gì đó phức tạp hơn Ill bình thường chỉ cần bỏ qua phần kịch bản và viết một chương trình C# nhanh có thể xử lý nó.

Câu hỏi đặt ra sau đó là bạn đặt mà C# chương trình trong svn và có nó là phiên bản :)

chỉnh sửa: Những lợi ích của một C# ứng dụng dành riêng cho là tôi có thể tái sử dụng đoạn mã để tạo ra lưỡi câu mới sau, bao gồm một đầu ra log đơn giản mà tôi đã tạo để xử lý việc ghi móc.

1

Tôi đã viết móc trong Python trên Windows vì có rất nhiều ví dụ trên mạng (thường là cho Linux nhưng sự khác biệt là nhỏ). Chúng tôi cũng sử dụng Trac tích hợp với SVN và có một Trac API có thể truy cập thông qua Python cho phép chúng tôi tự động tạo/sửa đổi Trac vé từ SVN hook script.

2

Kiểm tra CaptainHook, "một khung plugin đơn giản để viết các móc Subversion bằng .NET".

+0

đảm bảo có được các tập tin vá lỗi quá. Nó sửa lỗi 2x lỗi –

4

Chúng tôi đã có yêu cầu phức tạp như:

  1. Chỉ người dùng nhất định có thể tạo thư mục trong các bộ phận của cây SVN, nhưng ai cũng có thể chỉnh sửa các file có
  2. Một số phần mở rộng tập tin không thể chứa văn bản nhất định trong file
  3. một số phần mở rộng tập tin chỉ có thể được lưu trữ trong một tập hợp con của thư mục
  4. cũng như nhiều cái đơn giản như thế, phải có một cam kết bình luận
  5. Regression kiểm chứng bằng cách ru nning móc mới chống lại tất cả các cam kết SVN trước đây

# 5 là rất lớn đối với chúng tôi, không có cách nào tốt hơn để biết bạn sẽ không phá vỡ cam kết di chuyển về phía trước để có thể đẩy tất cả các cam kết trước đó thông qua móc mới của bạn. Làm cho móc hiểu rằng 1234 là một phiên bản và 1234-1 là một giao dịch và thực hiện các thay đổi đối số thích hợp khi gọi svnlook, vv là quyết định tốt nhất mà chúng tôi đã thực hiện trong quá trình.

Đối với chúng tôi, hạt đủ lớn để có thể kiểm tra, hồi quy hoàn toàn đơn vị, bảng điều khiển C# điều khiển exe có ý nghĩa nhất. Chúng tôi có các tệp cấu hình cấp giới hạn thư mục, phân tích cú pháp tệp httpd_authz hiện có để nhận người dùng "đặc quyền", v.v. Nếu chúng tôi không chạy trên Windows với lực lượng phát triển .NET, tôi có thể đã viết tất cả bằng Python, nhưng vì những người khác có thể cần phải hỗ trợ nó trong tương lai tôi đã đi. NET trên .BAT, .VBS, Powershell silliness.

Cá nhân tôi nghĩ Powershell đủ khác với .NET, hầu hết là vô dụng như một ngôn ngữ "viết kịch bản". Sẽ tốt nếu chỉ có dòng cmd hỗ trợ cho một sản phẩm thông qua PS (Exchange, Windows 2k8), v.v. nhưng nếu tất cả những gì bạn muốn làm là phân tích cú pháp một số văn bản hoặc truy cập các đối tượng .NET thông thường. Bức màn cho những gì có thể là một ứng dụng .NET nhanh chóng và dễ dàng.

1

Nếu bạn có một thực thi php với sự giúp đỡ của lớp php đơn giản bạn có thể viết kịch bản móc trong php như nó được hiển thị ở đây http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

+0

Điều đó không hoạt động trên các cửa sổ, bạn cần có một tập tin batch hoặc exe để khởi chạy tập lệnh php. –

Các vấn đề liên quan