« 2014年9月 | トップページ | 2014年12月 »

2014年10月

2014年10月11日 (土)

作業項目にリンクした修正ファイルの一覧を取得する:変更セットの取得

今回は作業項目から変更セットを取得するところです。
Tfs007_3

いろいろ処理が詰まっているので、番号を振ってみました。
また、一画面で入りきらなかったので、前半/後半に分けました。

①バージョン管理オブジェクトを取得しています。また、ファイル情報を格納するためのコレクションを作成しています。

②WIQLで取得したWorkItemCollectionからforeachでWorkItemを取り出します。

③作業項目に関連づけれらているリンクを取得します。foreachが使えなかった(と思います)ので、forで回しています。

④作業項目にはいろんな情報をリンクすることができますが、今回は変更セットへのリンクだけを取り出したいので、LinkクラスのArtifactLinkTypeプロパティを使い、リンクの種類が'Fixed in Changeset'でなければ処理対象外としています。

⑤リンクの内容から変更セットにアクセスします。
 リンク内容としてセットされているのが「vstfs:///VersionControl/Changeset/18」という形式になっています。最後の数字部分が変更セットのIDになりますので、これを抽出します。
 抽出した変更セットIDを使って、バージョン管理オブジェクトから変更セットの内容を取得します。

⑥変更セットのコレクションをループで回して変更対象のファイル一覧を作成します。

後半部分です。
Tfs008_2
⑦変更セットには、分岐(ブランチ)/ロックなどの修正以外の情報も格納されているので、ChangeクラスのChangeTypeを参照して修正対象のみを抽出するようにしています。←IsCollectChangeType()
 ChangeTypeの詳細は「ChangeType Enumeration」にあります。
 また、フォルダの変更情報も変更セットに格納されているので、Change.Item.ItemTypeを参照してファイルのみを抽出対象にしています。←IsCollectItemType()

⑧取得したファイルがファイル一覧のコレクションになければ追加、存在すればChangeTypeの内容を追加しています。

基本的にはTFSの標準機能で大体のことは対処できるのですが、こんな感じでTFSから情報を取得するコマンドが簡単に作れますので、自分の開発チームによっては「かゆいところに手が届く」感じのツールを作ることもできます。
今回のネタは自分が欲しかったので作ってみました。

実際に仕事で使うのはいつだろう・・・w

作業項目にリンクした修正ファイルの一覧を取得する:接続・作業項目の取得

接続の前にmain()部分です。
Tfs004

関連処理はTfsWorkItemクラスに入れています。
GetWorkItemsFromId()で作業項目IDから作業項目のリストを取得し、GetChangeFileList()で作業項目内の変更セットからファイル一覧を取得しています。
後は、取得したファイル一覧を単純にコンソールに出力しているだけです。

まずはTFSへの接続です。
Tfs005

チームプロジェクトコレクションのURLを引数にして、Microsoft.TeamFoundation.Client.TfsTeamProjectCollection()を呼び出すだけです。これだとOSユーザでTFSに接続しますので、OSユーザと異なるユーザ情報でTFSに接続したい場合はCredentialsを引数に追加してください。
ここでは、作業項目管理オブジェクトであるWorkItemStoreも取得しています。

次に作業項目の取得です。
Tfs006

WIQL(Work Item Query Language)というSQLに似たクエリ言語を使用して作業項目のリストを取得します。詳細については、MSDNの「バグ、タスク、およびその他の作業項目の照会」で確認してみてください。但し、項目名称は英語版を元に記載されているため、日本語版のTFSでは「フィールドがない」と怒られてしまいます。項目名称は画面上で表示される名称がそのまま使用可能なのですが、コマンドで確認することも可能です。それについては別の機会に説明したいと思います。

今回は一旦WorkItemsから作業項目自体を取得し、作業項目からリンクをたどるようにしています。ちなみですが、リンクを取得するだけであれば、「From WorkItemLinks」で取得可能なのです。
Queryメソッドの戻りはWorkItemCollectionですので、ループでぶん回せば作業項目を取得できます。

次はforeachでぶん回して変更セットから変更ファイルのリストを取得するところです。

作業項目にリンクした修正ファイルの一覧を取得する:概要

TFSではプログラムチェックイン時に作業項目に関連付けしておくことで、どの作業項目でどのファイルを修正したかがトレースできるようになっています。
Tfs001_2

変更セットのところをダブルクリックすると、チームエクスプローラーに変更セットの詳細が表示されます。
Tfs002_2


これはこれでいいんですが、画面で都度操作しないとファイル一覧が取得できません。
また、1つの作業項目に複数の変更セットがリンクされていると、それぞれに対して変更セットを確認する必要があります。

ちょっと面倒なので、TFS APIを使って指定した作業項目にリンクされている変更セットを検索し、修正ファイル一覧をコンソールに出力するプログラムを作ってみました。

コマンドプロンプトで、接続先チームプロジェクトコレクションのURL・作業項目種類・作業項目IDを指定すると、その作業項目のリンクされている修正ファイル一覧を出力します。
Tfs003_2

このプログラムをGitHubにて公開しました。
https://github.com/BlackSSI/ListupEditFileFromWorkItem
※いつものことですが、at your own riskです。あと、サンプルソースの公開用ですのでプルリクされても対応いたしかねます。(作り方が良くないのはご勘弁ください(^-^;)

次からは、処理の内容について説明します。

« 2014年9月 | トップページ | 2014年12月 »