2010-07-13 4 views
5

Étant donné un chemin particulier de dossier dans tfs, j'ai besoin de trouver récursivement tous les fichiers et dossiers dans le dossier pour un changeset donné. En d'autres termes, j'ai besoin d'obtenir la fermeture transitive d'un chemin dans tfs pour un changeset donné. Le problème auquel je fais face est de lister le contenu d'un dossier particulier dans tfs .. Comment cela serait-il possible en C#?énumérant tout le contenu d'un dossier dans tfs

Répondre

6

Je suppose que vous voulez « le contenu du dossier que de changeset X » et non « le contenu du dossier qui faisaient partie de changeset X »

GetIte ms est l'appel droit d'utiliser, il suffit de passer dans une spécification de version pour le changeset que vous êtes intéressé par

http://msdn.microsoft.com/en-US/library/bb138911.aspx

donc, supposant que vous avez déjà une référence à l'instance VersionControlServer.

var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full); 

Si j'ai mal compris et que vous vouliez "charger le contenu du dossier X", il y a plusieurs façons de le faire, mais obtenir le changeset avec GetChangeset et juste filtrer le Changes est assez simple.

+0

Je n'étais pas au courant de la spécification de la version. C'est ce que je voulais. Merci... – Sidd

-1

Vous pouvez utiliser le service Web changeset pour obtenir un document XML qui contient tous les éléments modifiés pour un ensemble de modifications particulier. Parcourez ensuite la liste des éléments modifiés et voyez s'ils sont dans le chemin que vous recherchez.

est ici l'URL du webservice changeset:

http: // your_tfs_server /VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number & webView = true

+0

Puis-je simplement faire un VersionControlServer.getItems() et boucler le tableau dérivé. Je suis juste en train de l'essayer maintenant ... – Sidd

+0

Downvoted (désolé David). Vous ne devriez pas utiliser le webservice pour le faire dans des circonstances (normales). Ceux-ci sont internes et peuvent changer sans préavis. – Robaticus

2

Quelque chose comme cela pourrait être plus ce que vous cherchez pour. Ceci obtient tous les changements dans un changeset et itère à travers eux, en identifiant ceux dans le chemin donné. Cela pourrait être raccourci avec une requête LINQ, mais je le laisse un peu plus élargi pour donner l'essentiel de ce que je suis en train de dire:

TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService<VersionControlServer>(); 

    Changeset cs = vcs.GetChangeset(6284868); 

    foreach (Change change in cs.Changes) 
    { 
     if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src")) 
     { 
      System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}", 
       cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString())); 
     } 
    } 
+0

Merci .. Mais je n'ai pas besoin des éléments dans un changeset particulier. J'ai besoin de tous les fichiers et dossiers sous un dossier donné dans tfs. – Sidd

+1

Ensuite, vous pouvez utiliser GetItems() ... votre question mentionne changeset, cependant. – Robaticus

0

Je pense que quelque chose comme ça fonctionnerait ..


    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService(); 
    ItemSet items; 

    items = vcs.GetItems(tfsPath, RecursionType.Full); 

Si vous avez d'autres idées, s'il vous plaît les poster ..

+0

vous le code est manquant la partie où vous définissez tfsPath à passer à GetItems –

Questions connexes