2012-02-16 14 views
1

変更されたファイルのリストをchagesetから取得し、他のすべての迷惑メールを除外する必要があります。tfsチェンジセットからファイルリストを取得

私はこの情報をコマンドtf changeset/i $(changesetnumber)から得ることができますが、ファイルのリストのほかに私は私の目的のために必要としない他の多くの情報を持っています。

あるいは、誰かがccnetからこのファイルのリストを取得する方法を教えてもいいので、私はmsbuild.projファイルにプロパティを介して送ることができます。

+1

TFS APIを見ましたか? – DaveShaw

答えて

0

CCNETのModification Writer Taskを使用できます。あなたの<msbuild>タスクで生成されたファイルをお使いのCCNET構成の<prebuild>セクションにそれを入れて、処理する:

<Project DefaultTargets="Go" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Go"> 
    <XmlPeek 
     XmlInputPath="$(CCNetArtifactDirectory)\modifications.xml" 
     Query="/ArrayOfModification/Modification"> 
     <Output TaskParameter="Result" ItemName="Modifications" /> 
    </XmlPeek> 
    <MSBuild 
     Projects="$(MSBuildProjectFile)" 
     Properties="Modification=%(Modifications.Identity)" 
     Targets="MessageModificationPath"> 
    </MSBuild> 
    </Target> 
    <Target Name="MessageModificationPath"> 
    <XmlPeek 
     XmlContent="$(Modification)" 
     Query="/Modification/FolderName/text()"> 
     <Output TaskParameter="Result" PropertyName="FolderName" /> 
    </XmlPeek> 
    <XmlPeek 
     XmlContent="$(Modification)" 
     Query="/Modification/FileName/text()"> 
     <Output TaskParameter="Result" PropertyName="FileName" /> 
    </XmlPeek> 
    <Message Text="$(FolderName)$(FileName)" /> 
    </Target> 
</Project> 

:私は本当にMSBuildの中でより多くのXML出力を解析する方法に関するので何かアドバイスを経験していませんよエレガントな方法が高く評価されています。

ヒント<XmlPeek>タスクは、.NET 4.0 MSBuildが必要です。

9

TFS APIを使用して、必要な情報を取得できます。ここで編集されたすべてのファイル名を選択しますいくつかの例C#コードだ、追加され、ファイルに

を削除
Uri serverUri = new Uri("http://mytfsserver:8080/"); 
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(serverUri); 
tpc.EnsureAuthenticated(); 
VersionControlServer vcs = tpc.GetService<VersionControlServer>(); 
var changeset = vcs.GetChangeset(changesetId); 
var changedFiles = from change in changeset.Changes where 
     ( (change.ChangeType & ChangeType.Edit) == ChangeType.Edit 
     || (change.ChangeType & ChangeType.Add) == ChangeType.Add 
     || (change.ChangeType & ChangeType.Delete) == ChangeType.Delete) 
    select change.Item.ServerItem; 

私はこれを統合するための最良の方法について助言することはできませんのでcc.netを使用していないが怖いですccnetにコンパイルできますが、小さなユーティリティにコンパイルしたり、スクリプト言語(Powershell、IronPythonなど)で書き直すことができます

+2

私はちょうどこれをあなたに感謝するために時間をかけたいと思いました。この単純な投稿が私のカスタムマージツールの作成にどのように役立つか分かりません。 – Taegost

+0

ここにありがとうマーク! – skundu

関連する問題