2012-02-16 3 views
1

변경된 파일 목록을 chageset에서만 가져와 다른 모든 junk를 제외해야합니다.tfs changeset에서 파일 목록 가져 오기

나는이 정보를 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

여기에 감사합니다. Mark! – skundu

관련 문제