スポンサーサイト

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

TortoiseSVN で複数の bugtraq を利用する方法

TortoiseSVNbugtraq は、コミットログにバグ追跡システムとの連携を関連付ける機能として非常に便利です。Notes/Domino を利用した構築方法は、過去のこの記事に書いてあります。
ただし、Version 1.6.6 現在に至るまで、複数のバグ追跡システム等への連携はとれません。

例えば、運用面か何かで、バグ追跡システムのサーバー引越しなどが発生し、引越し先では新たに発見した問題以降が登録されたとしたら、これまでのコミットログに記述した課題番号付きログが無用の長物になりかねません。

こりゃ、困ることになるな、と少々頭をひねってみました。

通常は、bugtraq:url にバグ追跡システムの URL とともに、文書を特定するための %BUGID% を記述します。%BUGID% は変数扱いで、コミットログに入力した文書IDが代入されます。
ユーザーはコミットログに付加された文書IDをクリックすれば、目的の文書が存在する URL に TortoiseSVN が変換してくれて、ブラウザで表示できるというわけです。

簡単に書くと、こんな感じ。

TortoiseSVN -> バグ追跡システムの該当文書

そーか。bugtraq:url に直接バグ追跡システムのURLを記述するから運用規模が狭くなっているのだ!と気が付いて、次のような事を思いつきました。

bugtraqPortal.html (仮称)を間にかませて、bugtraqPortal.html にて目的の url を分岐させてみてはどーでっしゃろ!?

簡単に書くと、こんな感じ。

TortoiseSVN -> bugtraqPortal.html (どのシステムを利用するか判断)
--> Aのバグ追跡システムの該当文書
--> Bのバグ追跡システムの該当文書

結論からいうと、出来ました。

これをうまく利用すれば、一方はバグ追跡で、もう一方は仕様文書へのリンクなどコミットログに貼りつけるといったような運用が可能になります。

詳細を書く前に、決め事があります。
文書IDの書式を特定しておきます。

例えば通常利用している文書ID(チケットIDとも言う)の書式が XXXX-YYYYYY だとします。
X には、大文字のアルファベットのみが入り、
Y には、大文字のアルファベットと数字が入ります。
正規表現で書けば、次のようになります。
X は [A-Z]{4}
Y は [A-Z0-9]{6}

こいつに細工をします。コミットログに文書IDを記載するときに、



XXXX-YYYYYY
-Zn
↑ ↑
文書ID システム識別子



のように、"-Zn" といった suffix をつける方向で話を進めます。
言うまでもなく、追加した "Zn" が、今回の bugtraqPortal.html に通知して「どのシステム利用するか」を特定させるための識別子です。

なお、過去のコミットログには、XXXX-YYYYYY が存在することも考慮して、"-Zn" が付かないケースも想定しておきます。
ですので、%BUGID% 変数には、既存の "XXXX-YYYYYY" または、今回拡張した "XXXX-YYYYYY-Zn" が入ってくる事になります。

TortoiseSVN の属性 bugtraq:url には、次のように指定します。ただし、後述の html が正しく動くか確認してからの作業になるので、実際には最後に行います。

bugtraq:url http://hoge/bugtraqPortal.html?%BUGID%

コミットログに記載された、"XXXX-YYYYYY(-Zn)" を特定するために、bugtraq:logregx の指定も必要です。こちらも、後述の html が正しく動くか確認してからの最後の最後の作業になります。

1行目:[A-Z]{4}-[A-Z0-9]{6}(-Z[0-9]+)*
2行目:([A-Z]{4}-[A-Z0-9]{6}(-Z[0-9]+)*)

※今回はコミットログ中のどこに、"XXXX-YYYYYY(-Zn)" が現れてもリンクをはらせたいので、1行目と2行目はほぼ同じです。

では、キモとなる %BUGID% を受け取る側の bugtraqPortal.html の中身です。

受け取った引数(%BUGID%)を分岐判断させ、目的の文書にリダイレクトさせるために、JavaScript を利用しました。


<html>
<head>
<title>bugtraq portal</title>
<script type="text/javascript">
<--
// デフォルトのurl
var url='http://issues/current/';

// URLの引数部分 '?' 以降を取り出し、一時変数 arg に代入します。
var arg = location.search;

// 引数の変数部分の文字列を取り出し、arg に再代入します。
arg = arg.substring(1,arg.length);

// arg から 文書ID部分のみを取り出し、一時変数 docID に代入します。"
// "XXXX-YYYYYY" 部分なので、index = 0 から 11文字分となります。

var docID = arg.substring(0,11);

// arg から分岐先の識別子 "Zn" を取り出し、一時変数 urlID に代入します。
// "Zn" 部分なので、13文字目以降を利用します。index は0から開始なので注意

var urlID=arg.substring(12);

// 分岐処理
switch(urlID)
{
case 'Z0':
url = 'http://issues/backup_000/';
break;
case 'Z1':
url = 'http://issues/backup_001/';
break;
default:
// 箸にも棒にも引っかからないケース
//url = url;
break;
}

// リダイレクト
setTimeout("link()",0);
function link() {
location.href = url + '?id=' + docID;
}
-->
</script>
</head>
</html>


この bugtraqPortal.html を http サーバーに保存しておきます。

TortoiseSVN の属性である、bugtraq:url と bugtraq:logregx を前述の方法で指定登録して利用します。

例)
コミットログに、"XXXX-YYYYYY-Z1" が書き込まれれば、リンクを自動作成し、そのリンクをクリックすると、
http://hoge/bugtraqPortal.html?XXXX-YYYYYY-Z1 が呼び出され、
呼び出された bugtraqPortal.html は次のURLにリダイレクトします。
http://issues/backup_001/?id=XXXX-YYYYYY 拍手コメントを見る

テーマ : ソフトウェア開発
ジャンル : コンピュータ

tag : TortoiseSVN bugtraq

コメント

非公開コメント
ブログ内検索
プロフィール

雷ぶ

Author:雷ぶ

最近の記事
最近のコメント
最近のトラックバック
カテゴリー
月間アーカイブ
ブロとも申請フォーム

この人とブロともになる

RSSフィード
リンク

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