Subversionコミット時にRedmineのチケットステータスをチェック

2011/2/25 10316hit
このエントリーをはてなブックマークに追加

自分の勤務先ではアジャイルプロセスを強制するために、
Subversionのコミット時にRedmineのチケット番号入力を機械的に強制しています。
※前記事参照
イテレーションに対するソースの変更が分かるので保守がやりやすいのですが、
バグに対するをチケットを起こさずにこっそりコミットする不届き者が出だしました。
明らかに怪しい奴はログを見れば分かるのですが、50人も人がいると全てのログは追えません。
Redmineをいじって入力されたチケット番号を機械的に検査することにしました。
Redmineのバージョンは1.0.2です。

ステータスチェックAPI追加

app/controllers/issues_controller.rbを修正

まずはログインをパスする記述をbefore_filterの上辺りに追加


skip_before_filter :check_if_login_required, :only => [:confirm_repository_path, :get_ticket_status]


ちなみにconfirm_repository_pathは@yusuke_kokuboさん作のAPIです。

パラメータからチケットを1件取得するフィルターに、新しいAPIを追記


# before_filter :find_issue, :only => [:show, :edit, :update]
before_filter :find_issue, :only => [:show, :edit, :update, :get_ticket_status]


authをすっ飛ばすように、フィルターに新しいAPIを追記


# before_filter :authorize, :except => [:index]
before_filter :authorize, :except => [:index, :confirm_repository_path, :get_ticket_status]


privateの上辺りに、新しいメソッドを追加


def get_ticket_status
if @issue.fixed_version && @issue.fixed_version.closed?
result = 1
elsif @issue.status && @issue.status.is_closed?
result = 2
else
result = 0
end
render :text => result
end


本来は3項演算子使ったりパイプしたりしてシンプルに書くべきだけど、うまくいかなくてデバッグ時に分かりやすく書いたそのまま(汗)。


追加したAPIのrouteマッピングを設定

config/routes.rbに追記
多分どこでもいいけど、自分は20行目に追加しました。


map.connect 'issues/:id/get_ticket_status', :controller => 'issues', :action => 'get_ticket_status'


SVNのフック用スクリプトを変更

VBSです。
その内JSかPowerShellに変えたい。


url = "http://さぁばぁ/redmine/issues/" & issues_id & "/get_ticket_status/"
http.open "GET", url, False
http.send

result = http.responseText
Set http = Nothing

'--- debug ---
'WScript.StdErr.WriteLine("HTTP Result:" + result)

If result <> "1" Then
WScript.StdErr.WriteLine("チケット番号" + issues_id + "はすでにcloseされたバージョンで登録されています。")
WScript.StdErr.WriteLine("このエラーはもっての他。。。")
WScript.Quit(1)
End If

If result <> "2" Then
WScript.StdErr.WriteLine("チケット番号" + issues_id + "はすでに終了しています。")
WScript.StdErr.WriteLine("バグこっそり直すの禁止ね。バグのチケットを起こすべし")
WScript.Quit(1)
End If


これでアジャイルをもっと、そして自然に意識してくれるはず。



前:RedmineでイメージNotFound対応 次:公共系SIerがRedmineを使うとこうなった

関連キーワード

[Ruby][IT][Redmine]

コメントを投稿する