Hatena::Groupfukuoka-py

ikikko.py このページをアンテナに追加 RSSフィード

2009-07-26

Backlogのコミットフックスクリプトを書いてみたよ

22:40 | Backlogのコミットフックスクリプトを書いてみたよ - ikikko.py を含むブックマーク はてなブックマーク - Backlogのコミットフックスクリプトを書いてみたよ - ikikko.py Backlogのコミットフックスクリプトを書いてみたよ - ikikko.py のブックマークコメント

ちょっとネタを思いついたので、今週かけてちょこちょこ検証しながらやってました。久しぶりのPython

元ネタは、trac-post-commit-hookです。日本語での説明は、[Think IT] 第4回:チケットとソースコードを連携せよ! (1/3)とかが分かりやすいかな。

概要

Backlogで外部Subversionを使用しているときに、コミットログで課題キーが指定されると自動でBacklogの該当課題にコメントを登録します。これは、内部ではBacklog APIを呼び出して実現しています。例えば、コミット時のログに

refs [[DEMO-1]], fixes [[DEMO-2]], done [[DEMO-3]]
コミットフックスクリプトのテストです。

とか書くと、

ln(r1) refs [[DEMO-1]], fixes [[DEMO-2]], done [[DEMO-3]]
コミットフックスクリプトのテストです。

Subversionのりビジョン(例:r1)を含んだコメントが各関連課題に登録され、課題:DEMO-2には同時に完了(完了理由:対応済み)に、課題:DEMO-3は処理済に持って行けます。

f:id:ikikko:20090726220029p:image

コミットログの記法

記法は、trac-post-commit-hookで同様の形式が使えます*1。「課題キー」の部分は「[[課題キー]]」でも構いません。

  • command 課題キー
  • command 課題キー, 課題キー
  • command 課題キー & 課題キー
  • command 課題キー and 課題キー

使えるコマンドは、↓の通りです。

処理コマンド備考
コメント登録close, closed, fix, fixed, fixes
コメント登録&完了references, refs, addresses, re, see
コメント登録&処理済doneオリジナルで追加

tracフックスクリプトとの違い

tracのそれと違うところは、下記の点です。

  1. 自動コメントの登録者は固定
  2. 課題更新者が参加しているプロジェクト全てが、更新対象
  3. 「done」コマンドで、状態を処理済へ変更するコマンドを追加

1は、Backlog APIを使う制限上、コメントの登録者は固定となってしまいます*2。なので課題更新用のユーザを作るのが一番分かりやすいでしょう。上記の画面イメージでは、「SVNフック君」というユーザを追加しています。

2は、SVNリポジトリと対応していない他のプロジェクトに対しても、(同一スペース内で)課題リンクさえ記載されていれば更新対象となります。というのは、プロジェクトからはリポジトリが一意に定められるけど、リポジトリからはプロジェクトを一意に定められないためです。

3は、新たに追加したコマンドです。小さいプロジェクトやタスクではコミット即完了とすることもあるでしょうが、ある程度の規模になるとコミットした後に責任者が確認してその後に完了とすることもあるかと思います。その際には、追加された「done」コマンドを使うと、状態を完了とはせずに処理済にすることができます。

事前設定

処理の流れ

  1. ソースコードをコミットする
  2. コミット後、post-commitが起動される
  3. post-commitから、課題更新を行うbacklog-post-commit-hook.pyが起動される
    1. svnlookコマンドを使用して、コミットしたてのコミットログを取得
    2. コミットログから、課題キーと対応するコマンド(refs, fixes等)を抽出
    3. 各課題に対して、コマンドに応じたBacklog APIで課題を更新

注意事項

(言い訳ですが)全部の検証をまともにやったわけではありません。特に、BacklogではHTTP/HTTPSで接続できるリポジトリにしか外部Subversionを設定できないのですが、そういった環境を用意できなかったので、完全な連携をとった形で試してはいません><

実際に試したのは、Backlogとの関連がないSubversionリポジトリにフックスクリプトを設置して、そのリポジトリにコミットしたときに適切にBacklog APIが飛んでいてコメントが登録されているよねというレベルです。正しいリポジトリと連携されていないので、コメントに記載されているSubversionリンクをクリックしても、思うようなページへジャンプはしてくれません。。。

なお、リポジトリは下記の場所に用意して試してみました。

*1:全部は検証し切れていませんが大体大丈夫です、多分。。。

*2Tracでは、コミット者の名前がチケット更新者に入る