お知らせ
2023.12.5(Tue)
目次
こんにちは。堀部です。
今回ご紹介するのはSVNのフックスクリプトを使用して、サーバー側でコミットを拒否する方法です。
そういったときに使えるTipsをご紹介します。
SVNが用意しているコミット関係のフックスクリプトは以下の3種類があります。
スクリプト名 | 実行タイミング |
---|---|
start-commit | コミットトランザクション作成前 |
pre-commit | コミットトランザクション作成後で、コミット直前 |
post-commit | コミット直後(コミットは完了するため拒否することはできない) |
今回はあるフォルダ配下のファイルのコミットを拒否しますので pre-commit を使用します。
pre-commitは、コミットを拒否したい場合に、0以外の終了コードを返すことでコミットを中断させます。pre-commitが終了コード:0を返すとコミットされます。
リポジトリがあるディレクトリの配下に、“hooks”というディレクトリがあります。その中にフックスクリプトのテンプレートファイルがありますのでファイル名前を変更します。
例:pre-commit.tmpl → pre-commit
$ ls repo/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 $
pre-commit を編集して保存します。
$ cd repo/hooks/ [/repo/hooks]$ vi pre-commit
#!/bin/sh # 対象リポジトリのパス REPOS="$1" # トランザクション番号 TXN="$2" # svnlookのパス SVNLOOK="/usr/bin/svnlook" # svnlook のコマンドライン引数 SVNLOOK_CMD="$SVNLOOK changed -t $TXN $REPOS" # 日本語を読み込む場合に必要 export LANG=jp_JP.UTF-8 for line in `$SVNLOOK_CMD` do # パスに'hoge'という文字列が含まれる場合にコミットを拒否する if echo "$line" | grep -E 'hoge' ; then echo "コミット禁止!!! : $line" >&2 exit 1 fi done exit 0
実行権限がないと動かないので実行権限をつけておきます。
$ chmod 755 pre-commit
エラーメッセージに日本語を使っている場合はこれをやっておかないと以下のエラーが発生します。
[Error output could not be translated from the native locale to UTF-8.]
$ vi /etc/sysconfig/httpd
#HTTPD_LANG=C #↓コメントアウトを外して「ja_JP.utf8」に変更 HTTPD_LANG=ja_JP.utf8
$ service httpd restart