Получить список файлов из набора изменений tfs - PullRequest
1 голос
/ 16 февраля 2012

Мне нужно получить список измененных файлов только из chageset и исключить все остальные ненужные файлы.

Я могу получить эту информацию из команды tf changeset / i $ (changesetnumber), но помимо Списка файлов у меня есть много другой информации, которая мне не нужна для моих целей.

Или, может быть, кто-то может сказать, как получить этот список файлов из ccnet, чтобы я мог отправить его в свой файл msbuild.proj через свойство.

Ответы [ 2 ]

9 голосов
/ 19 февраля 2012

Вы можете использовать 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)

0 голосов
/ 19 февраля 2012

Вы можете использовать CCNET для Modification Writer Task .Поместите его в раздел <prebuild> вашей конфигурации CCNET и обработайте сгенерированный файл в своей задаче <msbuild>:

<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.

...