snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Subversion のフック・スクリプト (コミット関連)

Subversion では、いくつかのタイミングで、外部プログラムを実行できる。 そのプログラムは一般的にフック・スクリプトと言われる。

環境 : subversion-1.1.4-2 (rpm) / CentOS 4.6

プログラムが実行される条件

  • リポジトリの hooks ディレクトリに決められたファイル名で存在する。
  • そのファイルが実行可能。 フック・スクリプトと言っているがバイナリの実行ファイルでも OK 。 linux の場合は実行パーミッションがセットされている必要がある。
  • ユーザにそのファイルを実行する権限がある。

実行されるファイル (ここではコミット関連のみ)

start-commit ファイル
コミット・トランザクションが作られる前に実行される。
第一引数 : リポジトリへのパス
第二引数 : コミットしようとしているユーザ名
終了コードが 0 以外の場合トランザクションが作られる前に中止。
pre-commit ファイル
実際のコミットの前に実行。
第一引数 : リポジトリへのパス
第二引数 : コミットされる筈のトランザクションの名前
終了コードが 0 以外の場合トランザクションが作られる前に中止。
post-commit ファイル
コミットされ、新しいリビジョンが作られた後に実行。
第一引数 : リポジトリへのパス
第二引数 : 今回作られたリビジョン番号
終了コードは無視される。

/home/svn/test1 リポジトリにフック・スクリプトを作成してみる。

$ cat /home/svn/test1/hooks/start-commit
#!/bin/sh

REPOS="$1"
USER="$2"

LOG=/tmp/test1-start-commit.log

echo `/bin/date '+%F %T %N'` " ------------------------------" >> $LOG
echo "repository[$REPOS]" >> $LOG
echo "user[$USER]" >> $LOG
/usr/bin/id >> $LOG
umask >> $LOG
echo "LANG[$LANG]" >> $LOG
/bin/env >> $LOG

exit 0
$ cat /home/svn/test1/hooks/pre-commit
#!/bin/sh

REPOS="$1"
TXN="$2"

LOG=/tmp/test1-pre-commit.log

echo `/bin/date '+%F %T %N'` " ------------------------------" >> $LOG
echo "repository[$REPOS]" >> $LOG
echo "transaction[$TXN]" >> $LOG

exit 0
$ cat /home/svn/test1/hooks/post-commit
#!/bin/sh

REPOS="$1"
REV="$2"

LOG=/tmp/test1-post-commit.log

echo `/bin/date '+%F %T %N'` " ------------------------------" >> $LOG
echo "repository[$REPOS]" >> $LOG
echo "revision[$REV]" >> $LOG

このリポジトリに Apache からアクセスする。 Apache の実行アカウントが apache:apache で、 これらのスクリプトの所有グループが apache なので グループにも実行パーミッションを設定。

# chmod ug+x start-commit

コミットした結果。 環境変数 PATH が設定されてないので、スクリプトを書く時は注意だ。

# ls -l /tmp
total 24
-rw-r--r--  1 apache apache 106 Apr  9 19:05 test1-post-commit.log
-rw-r--r--  1 apache apache 111 Apr  9 19:05 test1-pre-commit.log
-rw-r--r--  1 apache apache 235 Apr  9 19:05 test1-start-commit.log
$ cat /tmp/test1-start-commit.log
2008-04-09 19:05:46 381595000  ------------------------------
repository[/home/svn/test1]
user[snbhsmt]
uid=***(apache) gid=***(apache) groups=********** context=user_u:system_r:httpd_sys_script_t
0022
LANG[]
PWD=/
SHLVL=1
_=/bin/env
$ cat /tmp/test1-pre-commit.log
2008-04-09 19:05:46 487601000  ------------------------------
repository[/home/svn/test1]
transaction[11-1]
$ cat /tmp/test1-post-commit.log
2008-04-09 19:05:46 532045000  ------------------------------
repository[/home/svn/test1]
revision[12]
スポンサーサイト

« Trac と Subversion を連携させる|Top|Trac の attachments ディレクトリに書き込み権限を追加 »

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://snbhsmt.blog110.fc2.com/tb.php/86-248b5682

SVNでローカルサイトの自動更新

Mac OS X 10.5.8 Leopardで、Subversion(SVN)

Top

HOME

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。