無為空間
むいむい(´ω`*)
Entries
# Subversionのpost-commitフック REPOS="$1" REV="$2" SVNLOOK=/usr/bin/svnlook CHANGED_DIRS=`$SVNLOOK dirs-changed -r $REV $REPOS` # trunkにコミットされたらHudosnにビルド要求を出す if echo $CHANGED_DIRS | grep "^trunk" > /dev/null then wget -q -O /dev/null "http://localhost:8080/job/test/build" fi
上記はSubversionのフックスクリプトだが、これをBazaarでやりたい。
リポジトリごとにフック置き場が用意されているSubversionとは違い、Bazaarのフックはプラグインの一種として「システム全体のプラグイン置き場」か「個人のプラグイン置き場」に置かなければならない。
それはつまりフックの中で「pushされたブランチの絶対パスを特定しなければならない」ということなので、まずは下記の様なフックを用い、ブランチの位置についてどのような情報を得られるのかを確認しておくことにする。
from bzrlib import branch def print_branch(param): import os os.system('echo "%s" >> /var/tmp/branch.txt' % param.branch); branch.Branch.hooks.install_named_hook('post_change_branch_tip', print_branch, 'print branch')
なお、このフックのトリガは「push」ではなく「tipの変更」である。よってcommitやuncommitでも動作する。
どちらかというとこちらの方が元々の用途にはあっているし、そもそもpushはクライアント側でしかフックできないため、pushされる側に置くことができない。
実行環境:
- MacOS X 10.6.5
- Python 2.6.1
- Bazaar 2.2.0
$ mkdir -p /var/tmp/bzr/local $ cd /var/tmp/bzr/local $ bzr init
まずはこうしてブランチを作って……
$ bzr commit --unchanged
BzrBranch7(file:///private/var/tmp/bzr/local/)
パスを省略したcommitの場合、パスはrealpathになる。
$ bzr commit --unchanged /var/tmp/bzr/local
BzrBranch7(file:///var/tmp/bzr/local/)
絶対パスを指定したcommitの場合、パスは指定した絶対パスになる。
$ bzr push bzr+ssh://idlysphere@localhost/var/tmp/bzr/remote
BzrBranch7(filtered-4319272656:///var/tmp/bzr/remote/) RemoteBranch(bzr+ssh://idlysphere@localhost/var/tmp/bzr/remote/)
bzr+sshの場合、サーバ側のフック(前者)はプロトコル部がフィルタされた絶対パスになる。
以上のことから考えると、たとえば /var/bzr/central のブランチを監視したい場合は
from bzrlib import branch def auto_build(param): import os from urlparse import urlparse if os.path.samefile(urlparse(param.branch.base).path, '/var/bzr/central'): import urllib urllib.urlopen('http://localhost:8080/job/test/build') branch.Branch.hooks.install_named_hook('post_change_branch_tip', auto_build, 'auto build')
こんな風に書いておけば良さそう?
スポンサーサイト
コメント
コメントの投稿
トラックバック
- トラックバック URL
- http://idlysphere.blog66.fc2.com/tb.php/257-2b8f7457
- この記事にトラックバックする(FC2ブログユーザー)