2009-05-15 8 views
32

私はこれでどこにもいないようです。ウェブを検索してスクリプトなどを探します。あなたは、Tortoise Subversionのコミットに関するコメントのためにx文字を入力する必要があるWindows環境で、out-of-box pre-commit.tmplを編集できるスクリプトを手に入れました。この要件は、SVNサーバーからクライアントにプッシュダウンされている間、チームのすべてのメンバーが必要となるようにグローバルに?Windowsコメント長のためのプリコミットフック

私はスクリプト言語を知らず、これは私が次の3時間のスクリプトを理解する時間をとらなければかなり簡単なことです。

答えて

54

これはコメントが必要な.batファイルです。コメント内に少なくとも1つの文字が存在するかどうかをチェックします。

@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 

このファイルは、pre-commit.batというリポジトリの/ hooksフォルダにあります。あなたは文字の最小量が必要な場合は、修正するためのラインは

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

であるあなたが10文字以上を望んでいたのであれば、あなたは10を持っている必要があります。のではなく、ただ1

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

advanced options for the findstrコマンドは、あなたが好きなものより多くを行いますが、かなり簡単にセットアップできます。

+0

これまで見たことがありますが、構文がわからないときは簡単に修正できません。 – PositiveGuy

+0

私はプリコミット(サーバー側)のためにフックに入れようとしましたが、クライアントはコメントを入力することを余儀なくされました – PositiveGuy

+1

キーはコードのsvnlook行にあります。このスクリプトが機能するには、svnlookコマンドへの適切なパスがあることを確認する必要があります。 –

2

私はSubversionNotifyを使用します。

+0

これを見ましたが、このアプリケーションを参照する方法を示すコメントや正規表現の構文を制限する方法はありません。 – PositiveGuy

2

はこれを試してみてください:

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

私は正確に何をしたい行うことができますpre-commit hookを持っています。さらに多くのことがあります。

  • コミットコメントの最小長を指定できます。
  • コミットコメントをregular expressionと照合することができます。長さを指定できるだけでなく、特定のパラメータを指定することもできます。たとえば、コミットコメントには、欠陥追跡システムが使用するバグ番号が含まれているため、変更を特定の欠陥に戻すことができますか?

それはまた、あなたが次のことを行うことができます:

  • 読み書き:ユーザーは、これらのアイテムをチェックアウトしてコミットすることができます

    各種設定
    • は、特定のファイルやディレクトリに対する権限がコミット。
    • 読み取り専用:ユーザーはこのアイテムをチェックアウトできますが、変更をコミットできません。
    • 追加のみ:ユーザーはsvn cpでディレクトリを追加できますが、変更は一切行いません。これは、タグを作成することが許可されているが、タグを変更することができないディレクトリの/tagsディレクトリには最適です。
    • no-delete:ユーザーは変更をコミットして新しいファイルを追加できますが、これらのファイルは削除できません。
    • no-add:ユーザーは変更をコミットでき、コミット中のファイルの追加や削除はできません。

そして、それはまた、あなたがこれを行うことができます:

  • globbingの正規表現を経由して

    • 潘特定のファイル名が、特定のファイルやディレクトリを必要とするように、特定のプロパティセットを持っています特定の値。 Unixシェルスクリプト、Unix Makefiles、Windowsバッチファイルが正しい行末を持っているか、svn:ignoreが設定されていることを確認して、間違ってコミットしてはいけないファイルにユーザがコミットしないようにするのに非常に便利です。
    • 特定の値で設定する特定のリビジョンのプロパティを必要とします。これはコミットメッセージをチェックする方法ですが、svn:logは特定の正規表現と一致しなければならないと言っています。

    このプリコミットスクリプトはPerlで書かれています。デフォルトでは、PerlはUnix、Mac、およびLinuxサーバに付属しています。残念ながら、Windowsコンピュータには含まれていません。幸いにも、いくつかのオープンソースで、PC用の無料でインストールが簡単なPerlパッケージがあります。ActivePerlStrawberry Perl

  • 関連する問題