2017-02-02 8 views
2

Я написал службу, которая захватывает все изменения во всех коллекциях на моем TFS.Получите имя «Командный проект» из объекта изменения?

я могу динамически получить имя коллекции любого ревизией из changeset object, но у меня возникают проблемы, пытаясь найти имя проекта команды, что существует в ревизии.

Могу ли я каким-то образом найти название проекта команды набор изменений принадлежит?

foreach (Changeset cs in allChangeSets) 
    { 
      if (cs.Comment != null && ChangeSetFinderMVC.Utils.TFSUtil.Contains(cs.Comment, id)) 
      { 
        var cso = new ChangeSetObj(); 
        cso.ChangesetId = cs.ChangesetId; 
        cso.CheckinNote = cs.CheckinNote; 
        cso.Comment = cs.Comment; 
        cso.Committer = cs.Committer; 
        cso.CommitterDisplayName = cs.CommitterDisplayName; 
        cso.Collection = cs.VersionControlServer.TeamProjectCollection.Name; 
        cso.TeamProject = "????"; 

        changeSetList.Add(cso); 

      } 
    } 
+2

Я считаю, что можно выполнить проверку-в, который охватывает несколько командных проектов - что может быть, почему вы не найти прямую ссылку? –

+0

http://stackoverflow.com/questions/5435303/team-system-check-in-changes-to-multiple-projects-in-a-single-changeset – stuartd

+0

Когда неверующий верит, что вера сильна. – boll

ответ

0

Поскольку набор изменений может применяться к нескольким проектам сразу, вам нужно будет смотреть на каждый элемент, который изменил в ревизией и посмотреть, что проект был связан с.

Внутри Changeset вы можете получить доступ к пути TFS для каждого измененного элемента и просмотреть его путь к серверу.

foreach (Changeset changeSet in changeSets) 
{ 
    foreach (Change change in changeSet.Changes) 
    { 
     string tfsDir = change.Item.ServerItem; 
     // Example: "$/ProjectName/SomeFolders/SomeFile.cs" 
     // More logic to handle this string goes here. 
    } 
} 

Если вам нужны регулярные выражения, чтобы найти имя проекта, попробуйте следующее: ^\$\/(?<Project>.+?)\/

Убедитесь, что доступ к группе «Project» в матче регулярного выражения.

1

Как сказал @Toomaja, у нас может быть много TeamProjects, связанных с одним набором изменений. Его решение пришло в голову, что вы всегда знаете, что TeamProjects вы ищете. Даже вы заранее знаете TeamProjects, используя регулярное выражение для выполнения чего-то, что уже сделано с помощью доступных методов, снизит срок службы вашего кода и поддержит ваше решение для определенных TeamProjects. Я бы sugest вам получить уникальные TeamProjects, используя путь на сервере изменений, используя следующие:

private IEnumerable<string> _GetUniqueTeamProjects(Changeset changeset) 
    { 
     //We can have many changes in files in differentes TeamProjects within the same changeset 
     HashSet<string> teamProjects = new HashSet<string>(); 

     foreach (var ch in changeset.Changes) 
     { 
      //Get TeamProject using available repository access and change paths on server side. 
      var tp = ch.Item.VersionControlServer.GetTeamProjectForServerPath(ch.Item.ServerItem); 
      //Let the HashTable handle the unique value 
      teamProjects.Add(tp.Name); 
     } 

     return teamProjects; 
    } 
+1

Возможно, вы получите больше ответов на этот ответ и будущие ответы, если вы действительно объясните, что происходит в вашем коде, и _why_ он работает. StackOverflow не является сайтом Q & A, и важна повторная работа по ответам. Объяснение вашего ответа может помочь будущим читателям с похожими проблемами или может научить их определенным методам, если они смогут увидеть, что происходит на самом деле. – GrumpyCrouton

+1

Спасибо за помощь! –

+0

Спасибо за обновление по вашему ответу :) – GrumpyCrouton