2017-02-02 1 views
2

Ich habe einen Service geschrieben, der alle Changesets in allen Sammlungen auf meinem TFS erfasst.Name des "Team-Projekts" aus dem Changeset-Objekt?

kann ich dynamisch den Namen die Sammlung aller changeset vom changeset object bekommen, aber ich habe Probleme bei den Team Projektnamen versuchen zu finden, dass der changeset in existiert.

Kann ich irgendwie die Team Projektnamen finden ein Changeset gehört?

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

Ich glaube, dass es möglich ist, ein Check-in, dass erstreckt sich über mehrere Team-Projekte durchzuführen - das sein kann, warum du bist keine direkte Verbindung gefunden? –

+0

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

+0

Wenn der Ungläubige glaubt, der Glaube ist stark. – boll

Antwort

0

Da ein changeset auf einmal mehrere Projekte anwenden können, müssen Sie bei jedem Artikel suchen, die in der changeset geändert und sehen, welches Projekt er zugeordnet wurde.

Innerhalb der Changeset können Sie auf den TFS-Pfad jedes geänderten Elements zugreifen und dessen Serverpfad anzeigen.

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

Wenn Sie einige regex müssen die Projektnamen zu finden, versuchen Sie dies: ^\$\/(?<Project>.+?)\/

Stellen Sie sicher, dass die ‚Projekt‘ Gruppe in der Regex zugreifen.

1

Wie @Toomaja sagte, können wir viele TeamProjects mit einem einzigen Changeset haben. Seine Lösung bestand darin, dass Sie immer wissen, nach welchen TeamProjects Sie suchen. Selbst wenn Sie die TeamProjects bereits im Voraus kennen, können Sie mithilfe einer Regex-Funktion, die bereits von den verfügbaren Methoden ausgeführt wird, die Code-Lebensdauer verringern und Ihre Lösung für bestimmte TeamProjects bereithalten. Ich würde Sie sugest die einzigartigen TeamProjects mit dem Server-Pfad der Änderungen zu erhalten mit dem folgenden:

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

Sie würden wahrscheinlich mehr Rep für diese Antwort und zukünftige Antworten erhalten, wenn Sie tatsächlich erklären, was in Ihrem Code passiert, und _why_ es funktioniert. StackOverflow ist eine Q & A-Site und die Wiederverwendbarkeit von Antworten ist wichtig. Die Erklärung Ihrer Antwort kann zukünftigen Lesern mit ähnlichen Problemen helfen oder ihnen bestimmte Techniken beibringen, wenn sie sehen können, was tatsächlich vor sich geht. – GrumpyCrouton

+1

Danke für die Hilfe! –

+0

Danke für das Update auf Ihre Antwort :) – GrumpyCrouton

Verwandte Themen