Entries

スポンサーサイト

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

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')

こんな風に書いておけば良さそう?

~/Applications

タグ: Mac SnowLeopard

Mac OS X 10.6.5でホームフォルダにApplicationsフォルダを作ったら

Applicationsフォルダを作る

アプリケーションフォルダのアイコンが付いた。

アイコンが付いた

フォルダをデスクトップにドロップしたら、普通のアイコンに変わった。

アイコンが消えた

デスクトップからホームフォルダに戻したら、またアプリケーションフォルダのアイコンに戻った。

またアイコンが付いた

もう一度フォルダをデスクトップにドロップし、新たにApplicationsフォルダを作ってみたところ、新しく作った方にはアプリケーションフォルダのアイコンは付かなかった。

アイコンが付かない

「ホームフォルダに作られたApplicationsフォルダは、最初に作られたものに限り、個人用のアプリケーションフォルダとして認識される」ということ?

Appendix

タグ

Blog内検索

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