回答:
基本的には、バージョン管理外のプロパティがリポジトリで変更される前に起動されるスクリプトです。これにより、リポジトリで行われていることをより正確に管理できます。
/ hooksサブディレクトリ(* .tmplは、OSに応じて編集し、名前を変更してアクティブ化する必要があります)にある、さまざまなフック用のSVNディストリビューションのテンプレートがあります。
svnsync
ミラーのフックが必要な場合、デフォルトのスクリプトはsvn:logへの変更のみを許可するため、変更する必要があります。Svnsyncはこれ以上の変更exit 0
を行うため、すべてのプロパティの変更を許可するために単にそこに配置します(これは私だけのミラーであるため)。
pre-revprop-change
同じディレクトリに保存し、Webサーバーユーザーが実行できるようにします(Linuxの場合)。
Windowsの場合、ログメッセージの変更のみを許可するバッチファイルへのリンクを次に示します(他のプロパティは不可)。
http://ayria.livejournal.com/33438.html
基本的に、以下のコードをテキストファイルにコピーして名前を付け、リポジトリのサブディレクトリにpre-revprop-change.bat
保存し\hooks
ます。
@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5
:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME
:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION
:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY
goto :eof
:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
Linuxでログコメントの編集を許可するには、
pre-revprop-change.tmpl
を見つけhooks
ますpre-revprop-change
www-data
)編集:(lindesに感謝)
0
編集して、許可したい種類の編集の終了値を返す必要がある場合があります。多くの一般的なフックを含むスタックオーバーフローの質問へのリンクは次のとおりpre-revprop-change
です。
それらは時間の経過とともに改善される可能性があるため、そこで参照する必要があります。
フックスクリプトの名前は、解読できればそれほど怖くはありません。これは、リビジョン前のプロパティ変更フックです。要するに、pre-revprop-change
フックスクリプトの目的は、バージョン管理されていない(リビジョン)プロパティの変更を制御し、通知を送信することです(たとえば、リビジョンプロパティが変更されたときに電子メールを送信する)。
Subversionには2種類のプロパティがあります。
svn:needs-lock
およびなどsvn:mime-type
)svn:log
およびなどsvn:date
)。バージョン管理されたプロパティには履歴があり、リポジトリへの読み取り/書き込みアクセス権を持つ通常のユーザーが操作できます。一方、バージョン管理されていないプロパティには履歴がなく、主にメンテナンス目的で使用されます。たとえば、リビジョンをコミットするsvn:date
と、コミットのUTC時間svn:author
、ユーザー名、およびsvn:log
コミットログメッセージ(指定した場合)がすぐに取得されます。
既に指定したように、pre-revprop-change
フックスクリプトの目的は、リビジョンプロパティの変更を制御することです。リポジトリにアクセスできるすべての人がすべてのリビジョンプロパティを変更できるようにしたくないので、リビジョンプロパティの変更はデフォルトで禁止されています。ユーザーがプロパティを変更できるようにするには、pre-revprop-change
フックを作成する必要があります。
最も単純なフックには、1行だけを含めることができますexit 0
。認証されたユーザーがリビジョンプロパティを変更できるようにするため、実際の環境では使用しないでください。Windowsでは、バッチスクリプトまたはPowerShellベースのスクリプトを使用して、pre-revprop-change
フック内にロジックを実装できます。
このPowerShellスクリプトでは、svn:log
プロパティのみを変更でき、空のログメッセージは拒否されます。
# Store hook arguments into variables with mnemonic names
$repos = $args[0]
$rev = $args[1]
$user = $args[2]
$propname = $args[3]
$action = $args[4]
# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
[Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
exit 1
}
# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
[Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
exit 2
}
# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
# Log message is empty. Show the error.
[Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
exit 3
}
exit 0
このバッチスクリプトでは、「svnmgr」ユーザーのみがリビジョンプロパティを変更できます。
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0