いろいろ処理が詰まっているので、番号を振ってみました。
また、一画面で入りきらなかったので、前半/後半に分けました。
①バージョン管理オブジェクトを取得しています。また、ファイル情報を格納するためのコレクションを作成しています。
②WIQLで取得したWorkItemCollectionからforeachでWorkItemを取り出します。
③作業項目に関連づけれらているリンクを取得します。foreachが使えなかった(と思います)ので、forで回しています。
④作業項目にはいろんな情報をリンクすることができますが、今回は変更セットへのリンクだけを取り出したいので、LinkクラスのArtifactLinkTypeプロパティを使い、リンクの種類が’Fixed in Changeset’でなければ処理対象外としています。
⑤リンクの内容から変更セットにアクセスします。
リンク内容としてセットされているのが「vstfs:///VersionControl/Changeset/18」という形式になっています。最後の数字部分が変更セットのIDになりますので、これを抽出します。
抽出した変更セットIDを使って、バージョン管理オブジェクトから変更セットの内容を取得します。
⑥変更セットのコレクションをループで回して変更対象のファイル一覧を作成します。
後半部分です。
⑦変更セットには、分岐(ブランチ)/ロックなどの修正以外の情報も格納されているので、ChangeクラスのChangeTypeを参照して修正対象のみを抽出するようにしています。←IsCollectChangeType()
ChangeTypeの詳細は「ChangeType Enumeration」にあります。
また、フォルダの変更情報も変更セットに格納されているので、Change.Item.ItemTypeを参照してファイルのみを抽出対象にしています。←IsCollectItemType()
⑧取得したファイルがファイル一覧のコレクションになければ追加、存在すればChangeTypeの内容を追加しています。
基本的にはTFSの標準機能で大体のことは対処できるのですが、こんな感じでTFSから情報を取得するコマンドが簡単に作れますので、自分の開発チームによっては「かゆいところに手が届く」感じのツールを作ることもできます。
今回のネタは自分が欲しかったので作ってみました。
実際に仕事で使うのはいつだろう・・・w