Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

Comment récupérer par code les WorkItems d’un ChangeSet dans un contexte de branche ?

Imaginons que l’on ait 3 branches : dev / integration / prod.

On va faire plusieurs check-ins dans la branche de dev qu’on va relier avec des WorkItems.

Ensuite, on va appliquer un certains nombre de ces changesets sur l’integration, ce qui va générer un nouveau changeset (sur la branche d’intégration).

On peut répéter plusieurs fois cette opération puis, on va appliquer tout ou partie de ces changesets de l’integration sur la branche de prod (ce qui va générer un nouveau changeset sur la branche de prod).

Maintenant, pour un changesetid donné, je veux récupérer tous les workitems qui lui sont liés directement ou indirectement (ie : liés aux changesets de la branche précédente qu’on a intégré).

Comment faire ceci ?

Après avoir un peu galéré à trouver la bonne méthode à utiliser dans les API TFS, j’ai écrit le code suivant :

public static IEnumerable<WorkItem> GetWorkItems(string serverURL, string collectionName, NetworkCredential networkCredential, int changeSetId, params string[] branches)
{
    TfsConfigurationServer tfsConfigurationServer = new TfsConfigurationServer(new Uri(serverURL), networkCredential);
    tfsConfigurationServer.Authenticate();
    return GetWorkItems(tfsConfigurationServer.GetTeamProjectCollection(new Guid(tfsConfigurationServer.CatalogNode.QueryChildren(new[] { CatalogResourceTypes.ProjectCollection },
false, CatalogQueryOptions.None).FirstOrDefault(cn => cn.Resource.DisplayName == collectionName).Resource.Properties["InstanceId"])).GetService<VersionControlServer>(),
changeSetId, branches).Distinct(); } private static IEnumerable<WorkItem> GetWorkItems(VersionControlServer versionControlServer, int changeSetId, IEnumerable<string> branches) {
    foreach (WorkItem wi in versionControlServer.GetChangeset(changeSetId).WorkItems)
        yield return wi;
    string[] subBranches = branches.Take(2).ToArray();
    if (subBranches.Length == 2)
        foreach (WorkItem wi in versionControlServer.QueryMerges(subBranches[1], VersionSpec.Latest, subBranches[0], VersionSpec.Latest, new ChangesetVersionSpec(changeSetId),
new ChangesetVersionSpec(changeSetId), RecursionType.Full).SelectMany(cm => GetWorkItems(versionControlServer, cm.SourceVersion, branches.Skip(1))))
            yield return wi; }

Enjoy Sourire

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié vendredi 27 mai 2011 12:12 par Matthieu MEZIL

Classé sous : ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01