web-dev-qa-db-ja.com

コメント長SubversionのWindows Pre-commitフック

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

私はスクリプト言語を知りません。これは、次の3時間のスクリプトを理解するための時間を取らない限り、かなり単純なものになるはずです。

33
PositiveGuy

これはコメントが必要な.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文字が必要な場合は、1つだけではなく10個の。が必要です。

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

詳細 findstrの高度なオプション コマンドを使用すると、より詳細なチェックを行うことができます(特定の文字セットなど)

55
Corey Downie

私は SubversionNotify を使用します。おそらく必要以上のことを行いますが、設定は非常に簡単です。

2
Slipfish

Windowsでは、VisualSVNサーバーに付属し、VisualSVNServerHooks.exe check-logmessageディレクトリにある%VISUALSVN_SERVER%bin事前コミットフックを使用できます。このシンプルなツールは、ログメッセージで許可される最小文字数を定義するのに役立ちます。

手順については、記事 KB140:VisualSVNサーバーでのコミットログメッセージの検証 を参照してください。

1
bahrep

これを試して :

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
Nick

私は pre-commitフック を持っています。さらにもっとたくさん。

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

また、次のことも実行できます。

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

また、これを行うこともできます。

  • globbing の正規表現を使用して特定のファイル名を禁止する
  • 特定のファイルまたはディレクトリに特定のプロパティを特定の値に設定することを要求します。 Unixシェルスクリプト、Unix Makefile、Windowsバッチファイルの行末が正しいこと、またはsvn:ignoreが設定されていることを確認するなど、ユーザーが誤ってコミットしてはならないファイルをコミットしないようにするのに非常に役立ちます。
  • 特定のリビジョンプロパティを特定の値で設定する必要があります。これはコミットメッセージをチェックする方法ですが、svn:logは特定の正規表現に一致する必要があることを示しています。

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

1
David W.