SVNフック:リビジョンコメントの変更

デフォルトでSVNのリビジョンのコメントテキストの変更が許可されていないことは秘密ではありません。 この投稿は、これを可能にしたいが、方法がわからない人を対象としています。



まず、メモリの少しリフレッシュ



フックとは何ですか。



いいえ、これはスピルバーグの映画ではありません。私たちはハブにいます。 これは、イベントがキャッチされたフックです:)バージョン管理システムで特定のイベントが発生したときに起動するプログラムです。 これらはSVNだけでサポートされていないため、たとえばGITでフックをいじることができます。

リポジトリのルートにフックフォルダーがある場合は、これがフックネストであることに注意してください。 このフォルダーには、追跡対象のイベントに対応する名前のフックテンプレートを保存できます。

$ ls repos/hooks/ post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmpl post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl $
      
      





これは、これらのテンプレートに基づいて、独自のフックを作成できることを意味します。 ご想像のとおり、イベントの前にプリフックが起動します。 ポストフック-イベント後。

* start-commit-トランザクションの開始前に開始され、権利を確認するために使用できます。

* 事前コミット -トランザクションの最後に実行されますが、コミットの前に、たとえば空でないログメッセージをチェックするなど、データの検証によく使用されます。

* コミット後-トランザクションの後に実行され、電子メールの送信またはストレージの予約に使用できます。

* pre-revprop-change-リビジョンへの変更を使用してアクセスを確認する前に実行されます。

* post-revprop-change-リビジョンの変更後に起動され、電子メールの送信に使用できます。

* post-lockpost-unlockpre-lockpre-unlock-リポジトリがロックで動作するときに起動されます



リポジトリに接続し、したがってフックを起動するユーザーには実行権限が必要であることを述べるのは不要ではありません。



改訂コメントを変更



問題の解決に移りましょう。 pre-revprop-changeフックを使用して、追加の制御を導入します。 さらに、次のパラメーターがフックに渡されることに注意してください。

1.リポジトリへのパス

2.リビジョン。プロパティが変更されます

3.変更を行うユーザーの名前

4.変更するプロパティの名前

5.アクションコード:A(追加)、D(削除)、またはM(変更)



右側のフック。



* nixシステムでは、たとえばpre-revprop-changeのように、拡張子なしでhooksフォルダーに対応するファイルを作成するだけで十分です。



 #!/bin/sh #  . REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" ACTION="$5" #       (   ) if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0 else echo "Changing revision properties other than svn:log is prohibited" >&2 exit 1 fi
      
      







左側のフック。



Windowsでは、 フックフォルダー内のファイルは実行可能にする必要があります( pre-revprop-change.batなど)



 @ECHO OFF ::  . set repository=%1 set revision=%2 set userName=%3 set propertyName=%4 set action=%5 ::     (   ) if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME ::     (     ) if /I not "%action%" == "M" goto ERROR_ACTION :: ,      . 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
      
      







VisualSVNサーバーを使用している場合、デフォルトではバッチファイルは機能しません。 また、フックフォルダーを作成する必要はありません。 VisualSVN Server Managerを開くだけで、フックを作成するリポジトリのプロパティに移動し、[ フック ]タブを選択します。 Pre-revision property change hookをダブルクリックして、そこにバッチファイルコードをコピーします。

追加:VisualSVN Server Managerでフックをアクティブにすると、サーバー自体がフックフォルダーを作成し、そこで標準テンプレートを生成します。

先端ケモダックスをありがとう



PSすべての情報と、インターネット上のフックのコードを見つけました



All Articles