fc2ブログ

Entries

Bazaarの中央ブランチへのpushをHudsonのビルドトリガにしたい

タグ: Bazaar Hudson
# 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ブログユーザー)

Appendix

タグ

Blog内検索