2009-05-15 16 views
32

Tôi dường như không nhận được hư không với điều này. Tìm kiếm trên web cho tập lệnh, v.v. Bất kỳ ai cũng có một tập lệnh mà bạn chỉ có thể chỉnh sửa tiền tố cam kết ngoài hộp trong môi trường Windows yêu cầu x ký tự nhập vào để nhận xét về cam kết trong Tortoise Subversion trên toàn cầu để tất cả các thành viên trong nhóm được yêu cầu trong khi yêu cầu này được đẩy xuống cho các khách hàng từ máy chủ SVN?Windows Pre-cam kết móc cho chiều dài bình luận Subversion

Tôi không biết ngôn ngữ kịch bản và điều này nên là một thứ khá đơn giản mà không cần tôi dành thời gian để tìm ra kịch bản trong 3 giờ tới.

Trả lời

54

Đây là tệp .bat để yêu cầu có nhận xét. Nó kiểm tra sự tồn tại của ít nhất một ký tự trong nhận xét.

@echo off 
:: Stops commits that have empty log messages.   
@echo off 

setlocal 

rem Subversion sends through the path to the repository and transaction id 
set REPOS=%1 
set TXN=%2   

svnlook log %REPOS% -t %TXN% | findstr . > nul 
if %errorlevel% gtr 0 (goto err) else exit 0 

:err 
echo. 1>&2 
echo Your commit has been blocked because you didn't enter a comment. 1>&2 
echo Write a log message describing the changes made and try again. 1>&2 
echo Thanks 1>&2 
exit 1 

Tệp này nằm trong thư mục/hooks của kho lưu trữ, có tên pre-commit.bat. Nếu bạn cần một số tiền tối thiểu của các nhân vật, dòng thay đổi là

svnlook log %REPOS% -t %TXN% | findstr . > nul 

Vì vậy, nếu bạn muốn có một tối thiểu là 10 ký tự, bạn cần phải có 10. Ấy chứ không phải chỉ là một

svnlook log %REPOS% -t %TXN% | findstr .......... > nul 

Thêm advanced options for the findstr lệnh sẽ cho phép bạn thực hiện kiểm tra fancier (bộ ký tự nhất định, ect)

+0

Tôi đã thấy điều đó nhưng không dễ sửa đổi khi bạn không biết cú pháp. – PositiveGuy

+0

thậm chí đã cố gắng đặt điều đó vào móc cho tiền cam kết (phía máy chủ) và khách hàng của tôi không bị bắt buộc phải nhập nhận xét, – PositiveGuy

+1

khóa nằm trong dòng svnlook của mã. Bạn sẽ cần đảm bảo rằng bạn có một đường dẫn thích hợp tới lệnh svnlook để kịch bản này hoạt động. –

2

Tôi sử dụng SubversionNotify, nó có thể nhiều hơn những gì bạn cần, nhưng khá đơn giản để thiết lập.

+0

Nhìn vào điều này, nhưng không nhìn thấy một cách để giới hạn ý kiến ​​hoặc bất kỳ cú pháp regex cho bạn thấy làm thế nào để tham chiếu đến ứng dụng này. – PositiveGuy

2

Hãy thử điều này:

rem Make sure that the log message contains some text. 
set REPOS=%1 
set TXN=%2 

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% | FindStr [a-zA-Z0-9] 
IF %ERRORLEVEL% EQU 0 GOTO OK 
echo Your commit has been blocked because you didn't provide a log message 1>&2 
echo Please write a log message describing the purpose of your changes and 1>&2 
echo then try committing again. -- Thank you 1>&2 
exit 1 

:OK 
rem ------------------------------------------------------------- 
rem Check if comment is in list of reserved words to not be used.. 
rem ------------------------------------------------------------- 

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% >comment 
setlocal enabledelayedexpansion 
Set SEPARATOR= 
set COMMENT= 
for /f "delims=" %%a in (comment) do (  
    set currentline=%%a 
    set COMMENT=!COMMENT!%SEPARATOR%!currentline! 
) 

FIND "%COMMENT%" "C:\Program Files\Subversion\excludedwords.txt">Null 
If %ERRORLEVEL% EQU 1 goto OK2 

:Fail 
echo Your commit has been blocked because the single word comment you provided is not allowed 1>&2 
echo Line is -%COMMENT%- 1>&2 
echo Please write a proper log message describing the purpose of your changes and 1>&2 
echo then try committing again. -- Thank you 1>&2 
exit 1 


:OK2 
rem ------------------------------------------------------------- 
rem Check number of words on the line if = 2 then reject comment 
rem ------------------------------------------------------------- 
Set VAR1=%COMMENT% 
Set count=0 
For %%j in (%VAR1%) Do Set /A count+=1 
IF %count% EQU 2 goto Fail2 
goto OK3 

:Fail2 
echo Your commit has been blocked because not enough detail supplied 1>&2 
echo Please write a longer log message describing the purpose of your changes and 1>&2 
echo then try committing again. -- Thank you 1>&2 
exit 1 

:OK3 
rem ------------------------------------------------------------- 
rem Check that the author of this commit has the rights to perform 
rem ------------------------------------------------------------- 
rem the commit on the files and directories being modified. 
rem commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 

rem All checks passed, so allow the commit. 
exit 0 
1

Tôi có một pre-commit hook có thể thực hiện chính xác những gì bạn muốn. Cộng thêm rất nhiều.

  • Bạn có thể chỉ định thời lượng nhận xét cam kết tối thiểu.
  • Bạn có thể đối sánh nhận xét cam kết với số regular expression. Không chỉ bạn có thể chỉ định độ dài, nhưng bạn cũng có thể chỉ định các thông số nhất định. Ví dụ: nhận xét cam kết có chứa số lỗi mà hệ thống theo dõi lỗi của bạn sử dụng, vì vậy bạn có thể theo dõi lại thay đổi đối với một lỗi cụ thể không?

Nó cũng cho phép bạn làm như sau:

  • Đặt nhiều cam kết cho phép chống lại các file hoặc thư mục cụ thể:
    • đọc-viết: Người dùng có thể kiểm và cam kết các mặt hàng này.
    • chỉ đọc: Người dùng có thể thanh toán mục này nhưng không thể thực hiện thay đổi.
    • chỉ thêm: Người dùng có thể thêm thư mục qua svn cp nhưng không thực hiện bất kỳ thay đổi nào. Điều này là hoàn hảo cho thư mục /tags nơi bạn được phép tạo thẻ nhưng không sửa đổi thẻ.
    • không xóa: Người dùng có thể thực hiện thay đổi và thêm tệp mới nhưng không xóa các tệp này.
    • không thêm: Người dùng chỉ có thể thực hiện thay đổi và không thêm hoặc xóa tệp trong cam kết.

Và, nó cũng cho phép bạn làm điều này:

  • Ban tên tập tin nhất định qua biểu thức thông thường của globbing,
  • Yêu cầu các tập tin hoặc thư mục nhất định có một tài sản đặc biệt thiết lập để một giá trị cụ thể. Rất hữu ích cho những thứ như đảm bảo các tập lệnh shell Unix, các tệp Unix Makefiles và Windows Batch có dòng kết thúc chính xác hoặc svn:ignore được đặt, vì vậy người dùng không vô tình cam kết trong các tệp mà họ không nên cam kết.
  • Yêu cầu các thuộc tính sửa đổi nhất định phải được đặt bằng các giá trị nhất định. Đây là cách bạn kiểm tra thư cam kết, nhưng nói rằng svn:log phải khớp với một số cụm từ thông dụng nhất định.

Tập lệnh trước cam kết này được viết bằng Perl. Theo mặc định, Perl đi kèm với các máy chủ Unix, Mac và Linux. Thật không may, nó không được bao gồm trên các máy tính Windows. May mắn thay, có một số gói Perl mã nguồn mở, miễn phí và dễ cài đặt cho PC như ActivePerlStrawberry Perl