ソフトウェア開発において、変更が特定のバグまたは課題IDに関連付けられることは非常に一般的です。バグ追跡システム(課題管理システム)のユーザーは、Subversionで行った変更を課題管理システムの特定のIDに関連付けたいと考えています。したがって、ほとんどの課題管理システムは、コミットに関連付けられたバグIDを見つけるためにログメッセージを解析するプリコミットフックスクリプトを提供しています。これは、ユーザーがプリコミットフックスクリプトが正しく解析できるようにログメッセージを適切に記述することに依存しているため、ある程度エラーが発生しやすいです。
TortoiseSVNはユーザーを2つの方法で支援できます。
ユーザーがログメッセージを入力するとき、コミットに関連付けられた課題番号を含む明確に定義された行が自動的に追加できます。これにより、ユーザーがバグ追跡ツールが正しく解析できない方法で課題番号を入力するリスクが軽減されます。
または、TortoiseSVNは、入力されたログメッセージの中で課題管理システムによって認識される部分を強調表示できます。そうすることで、ユーザーはログメッセージが正しく解析できることを知ることができます。
ユーザーがログメッセージを閲覧するとき、TortoiseSVNはログメッセージ内の各バグIDからリンクを作成し、言及された課題に対してブラウザを起動します。
TortoiseSVNに任意のバグ追跡ツールを統合できます。これを行うには、bugtraq:
で始まるいくつかのプロパティを定義する必要があります。これらはフォルダーに設定する必要があります((「プロジェクト設定」)セクションを参照)。
bugtraqプロパティのいずれかを編集すると、適切な値を設定しやすくするために特別なプロパティエディターが使用されます。
TortoiseSVNを課題管理システムと統合するには、2つの方法があります。1つは単純な文字列に基づく方法、もう1つは正規表現に基づく方法です。両方の方法で使用されるプロパティは次のとおりです
このプロパティをバグ追跡ツールのURLに設定します。これは適切にURIエンコードされている必要があり、%BUGID%
を含んでいる必要があります。%BUGID%
は、入力した課題番号に置き換えられます。これにより、TortoiseSVNはログダイアログにリンクを表示できるため、リビジョンログを見ているときにバグ追跡ツールに直接ジャンプできます。このプロパティを提供する必要はありませんが、その場合、TortoiseSVNは課題番号のみを表示し、リンクは表示しません。
絶対URLの代わりに相対URLを使用することもできます。これは、課題管理システムがソースリポジトリと同じドメイン/サーバー上にある場合に役立ちます。ドメイン名が変更された場合でも、bugtraq:url
プロパティを調整する必要はありません。相対URLを指定するには2つの方法があります
^/
という文字列で始まる場合、リポジトリルートからの相対パスと見なされます。たとえば、リポジトリがhttps://example.com/svn/trunk/
にある場合、^/../?do=details&id=%BUGID%
はhttps://example.com/?do=details&id=%BUGID%
に解決されます。
/
という文字列で始まるURLは、サーバーのホスト名からの相対パスと見なされます。たとえば、リポジトリがhttps://example.com
のどこかに配置されている場合、/?do=details&id=%BUGID%
はhttps://example.com/?do=details&id=%BUGID%
に解決されます。
課題番号のテキストフィールドが空の場合にTortoiseSVNに警告させたい場合は、これをtrue
に設定します。有効な値はtrue/false
です。 定義されていない場合、false
と見なされます。
単純な方法では、TortoiseSVNはユーザーにバグIDを入力できる独立した入力フィールドを表示します。次に、ユーザーが入力したログメッセージに独立した行が追加/先頭に追加されます。
このプロパティは、入力フィールドモードでバグ追跡システムを有効にします。このプロパティが設定されている場合、TortoiseSVNは変更をコミットするときに課題番号を入力するように求めます。これは、ログメッセージの末尾に行を追加するために使用されます。これには%BUGID%
を含める必要があり、コミット時に課題番号に置き換えられます。これにより、コミットログには常に一貫した形式で、特定のコミットに課題番号を関連付けるためにバグ追跡ツールで解析できる課題番号への参照が含まれるようになります。例として、Issue : %BUGID%
を使用できますが、これはツールによって異なります。
このテキストは、課題番号を入力する編集ボックスにラベルを付けるために、コミットダイアログでTortoiseSVNによって表示されます。設定されていない場合、Bug-ID / Issue-Nr:
が表示されます。ただし、ウィンドウはこのラベルに合わせてサイズ変更されないことに注意してください。ラベルのサイズを20〜25文字未満にしてください。
true
に設定すると、課題番号のテキストフィールドには数字のみが許可されます。例外はコンマであり、複数の数字をコンマで区切ることができます。有効な値はtrue/false
です。 定義されていない場合、true
と見なされます。
このプロパティは、バグIDをログメッセージの末尾に追加(true)するか、ログメッセージの先頭に挿入(false)するかを定義します。有効な値はtrue/false
です。 定義されていない場合、既存のプロジェクトが壊れないように、true
と見なされます。
正規表現を使用する方法では、TortoiseSVNは独立した入力フィールドを表示しませんが、ユーザーが入力したログメッセージの中で課題管理システムによって認識される部分をマークします。これはユーザーがログメッセージを書いている間に行われます。これはまた、バグIDがログメッセージ内のどこにでも配置できることを意味します!この方法ははるかに柔軟性があり、TortoiseSVNプロジェクト自体で使用されている方法です。
このプロパティは、Regexモードでバグ追跡システムを有効にします。これには、単一の正規表現、または改行で区切られた2つの正規表現が含まれています。
2つの式が設定されている場合、最初の式はバグIDを含む式を見つけるためのプリフィルターとして使用されます。次に、2番目の式は、最初の正規表現の結果から生のバグIDを抽出します。これにより、必要に応じてバグIDのリストと自然言語式を使用できます。たとえば、いくつかのバグを修正し、“This change resolves issues #23, #24 and #25”のような文字列を含めることができます。
上記の式で使用されているようにログメッセージ内でバグIDをキャッチしたい場合は、TortoiseSVNプロジェクトで使用されている次の正規表現文字列を使用できます:[Ii]ssues?:?(\s*(,|and)?\s*#\d+)+
および (\d+)
。
最初の式は、周囲のログメッセージから“issues #23, #24 and #25”を抽出します。2番目の正規表現は、最初の正規表現の出力からプレーンな10進数を抽出するため、バグIDとして使用するために“23”、“24”、“25”を返します。
最初の正規表現を少し分解すると、“issue”という単語で始まる必要があり、大文字で始まる可能性があります。これに続いて、オプションで“s”(複数の課題)とオプションでコロンが続きます。これに続いて、0個以上の先頭の空白、オプションのコンマまたは“and”、およびさらにオプションのスペースを持つ1つ以上のグループが続きます。最後に、必須の“#”と必須の10進数があります。
式が1つだけ設定されている場合、生のバグIDは正規表現文字列のグループで一致する必要があります。例:[Ii]ssue(?:s)? #?(\d+)
この方法は、tracなどのいくつかの課題管理システムで必要ですが、正規表現を構築するのはより困難です。課題管理システムのドキュメントで指示されている場合にのみ、この方法を使用することをお勧めします。
正規表現に慣れていない場合は、 https://en.wikipedia.org/wiki/Regular_expression の入門記事、および https://regular-expressions.dokyumento.jp/ のオンラインドキュメントとチュートリアルをご覧ください。
正規表現を正しく取得するのは必ずしも簡単ではないため、支援するためにbugtraqプロパティダイアログにテストダイアログが組み込まれています。編集ボックスの右側にあるボタンをクリックして表示します。ここでは、いくつかのテストテキストを入力し、各正規表現を変更して結果を確認できます。正規表現が無効な場合、編集ボックスの背景が赤に変わります。
bugtraq:message
プロパティとbugtraq:logregex
プロパティの両方が設定されている場合、logregex
が優先されます。
ログメッセージを解析するプリコミットフックを備えた課題管理システムがない場合でも、これを使用してログメッセージで言及されている課題をリンクに変えることができます!
また、リンクが必要ない場合でも、課題番号はログダイアログの独立した列として表示されるため、特定の課題に関連する変更を簡単に見つけることができます。
一部のtsvn:
プロパティは、true/false
値を必要とします。TortoiseSVNは、yes
をtrue
の同義語として、no
をfalse
の同義語としても理解します。
システムが機能するためには、これらのプロパティをフォルダーに設定する必要があります。ファイルまたはフォルダーをコミットすると、プロパティはそのフォルダーから読み取られます。プロパティがそこに見つからない場合、TortoiseSVNはバージョン管理されていないフォルダー、またはツリーのルート(例:C:\
)が見つかるまで、フォルダーツリーを上方向に検索してプロパティを見つけます。各ユーザーがtrunk/
などからのみチェックアウトし、サブフォルダーからチェックアウトしないことを確信できる場合は、trunk/
にプロパティを設定するだけで十分です。確信できない場合は、各サブフォルダーにプロパティを再帰的に設定する必要があります。プロジェクト階層のより深いプロパティ設定は、より高いレベル(trunk/
に近い)の設定をオーバーライドします。
バージョン1.8以降、TortoiseSVNとSubversionは、いわゆる継承されたプロパティ
を使用します。これは、フォルダーに設定されたプロパティがすべてのサブフォルダーにも自動的に暗黙的に設定されることを意味します。したがって、すべてのフォルダーにプロパティを設定する必要はなくなり、ルートフォルダーのみに設定すればよくなりました。
プロジェクトプロパティのみ、つまりtsvn:
、bugtraq:
、およびwebviewer:
の場合、再帰的チェックボックスを使用して、階層内のすべてのサブフォルダーにプロパティを設定できます。すべてのファイルにも設定する必要はありません。
TortoiseSVNを使用してワーキングコピーに新しいサブフォルダーを追加すると、親フォルダーに存在するプロジェクトプロパティは、新しい子フォルダーにも自動的に追加されます。
課題追跡システムの統合はSubversionプロパティへのアクセスに依存しているため、チェックアウトされたワーキングコピーを使用する場合にのみ結果が表示されます。プロパティをリモートでフェッチするのは遅い操作であるため、ワーキングコピーからリポジトリブラウザを起動した場合を除き、リポジトリブラウザからこの機能の動作を見ることはできません。リポジトリのURLを入力してリポジトリブラウザを起動した場合、この機能は表示されません。
同じ理由で、リポジトリブラウザを使用して子フォルダーを追加した場合、プロジェクトプロパティは自動的に伝播されません。
この課題追跡システムの統合はTortoiseSVNに限定されません。任意のSubversionクライアントで使用できます。詳細については、TortoiseSVNソースリポジトリの Issue Tracker Integration Specification 全文をお読みください。((「ライセンス」)セクションでは、リポジトリへのアクセス方法について説明しています。)
前のセクションでは、ログメッセージに課題情報を追加する方法について説明しました。しかし、課題追跡システムから情報を取得する必要がある場合はどうでしょうか?コミットダイアログには、トラッカーと通信できる外部プログラムを統合できるCOMインターフェースがあります。通常、トラッカーにクエリを実行して、自分に割り当てられた未解決の課題のリストを取得し、このコミットで対処する課題を選択できるようにすることが望ましい場合があります。
そのようなインターフェースは当然、課題追跡システムに非常に固有のものであるため、この部分を提供することはできません。また、そのようなプログラムの作成方法を説明することは、このマニュアルの範囲を超えています。インターフェース定義とC#およびC++/ATLのサンプルプラグインは、 TortoiseSVNリポジトリ のcontrib
フォルダーから入手できます。((「ライセンス」)セクションでは、リポジトリへのアクセス方法について説明しています。)APIの概要は、第7章 IBugtraqProviderインターフェースにも記載されています。C#の別の(動作する)サンプルプラグインは、 Gurtle であり、 Google Code 課題追跡システムと対話するために必要なCOMインターフェースを実装しています。Google Code自体は2016年以降に閉鎖されましたが、プラグインは引き続き実装例として利用可能です。
説明のために、システム管理者がインストールした課題追跡システムプラグインを提供し、TortoiseSVNの設定ダイアログでプラグインを使用するようにワーキングコピーの一部を設定したと仮定しましょう。プラグインが割り当てられているワーキングコピーからコミットダイアログを開くと、ダイアログの上部に新しいボタンが表示されます。
この例では、1つ以上の未解決の課題を選択できます。プラグインは、ログメッセージに追加する特別にフォーマットされたテキストを生成できます。