リポジトリブラウザでログコメントを編集したいのですが、リポジトリにpre-revprop-changeフックが存在しないというエラーメッセージが表示されました。怖い名前を持っていることに加えて、pre-revprop-changeフックとは何ですか、そしてそれをどのように作成しますか?
11 に答える
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
基本的には、バージョン管理されていないプロパティがリポジトリで変更される前に起動されるスクリプトであるため、リポジトリで何が起こっているかをより正確に管理できます。
SVNディストリビューションには、さまざまなフック用のテンプレートがあり、/ hooksサブディレクトリにあります(* .tmplは、アクティブ化するために、OSに応じて編集および名前変更する必要があります)。
Linux でログ コメントの編集を許可するには、
- リポジトリ
pre-revprop-change.tmpl
のディレクトリでファイルを見つけますhooks
- ファイルを同じディレクトリにコピーし、名前を
pre-revprop-change
- ファイルに実行権限を与える (サーバー ユーザーなど
www-data
)
編集:(リンデスに感謝)
- その後、スクリプトを編集して
0
、許可したい編集の種類の終了値を返す必要がある場合があります。
これは、多くの一般的なフックを含むスタック オーバーフローの質問へのリンクです。 一般的なタイプの Subversion フックpre-revprop-change
、ここにクロスポストされた Windowsのフックの元のソースを含みます。
それらは時間の経過とともに改善される可能性があるため、そこを参照する必要があります。
ありがとう #patmortech
そして、「同じユーザーだけが自分のコードを変更できる」というコードを追加しました。
:: Only allow editing of the same user.
for /f "tokens=*" %%a in (
'"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %revision% %repository%') do (
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER
PC ユーザーの場合: Windows Server のマッチングで使用すると、.bat 拡張子が機能しませんでした。Django Reinhardt が提案したように VisualSvn を使用し、.cmd 拡張子のフックを作成しました。