mercredi 30 décembre 2009

PsTFS Web Admin

Il y a quelques temps je vous parlais d'un site web pour PsTFS. Celui-ci arrive enfin en version Alpha mais déjà utilisable, je dis version Alpha car il manque encore des fonctionnalités, un ou deux bugs non bloquant sont encore en cours de correction.

Mais si c'est en version Alpha avec des bugs, pourquoi publier ??? me poser cette question est tout à fait normale. J'ai développé cette application web avec mes besoins qui étaient :
  • Avoir des indicateurs de mes projets
  • Pouvoir facilement créer des nouveaus indicateurs
  • Afficher ces indicateurs dans WSS ou MOSS ou tout autre application (Web ou Winform)

Aujourd'hui PsTFS Web Admin correspond à ce besoin, mais il existe certainement d'autre besoin que vous auriez et c'est pour cela que je souhaite mettre à votre disposition cette application.

Voici des petites vidéos vous permettant de voir les capacités de cette application :





Pour suivre les évolutions je vous invite sur Facebook :
http://www.facebook.com/pages/PsTFS/229217054095

Pour le téléchargement :
http://pstfswebadmin.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=37962

Merci de vos retours

mercredi 9 décembre 2009

Comment changer l’Add-in TFS 2010 par celui de TFS 2008 dans Excel

Lors de l'installation de VS 2010 Ultimat (et oui version beta, mais déjà bien pratique), l'add-in dans Excel se trouve être naturellement la version 2010. Il se peut pour divers raison et pour faire des articles (là c'est mon cas) devoir changer la version de l'Add-in.

Pour ce faire :

Aller dans les options d'Excel :

Puis dans les compléments :

Puis dans Gérer choisir « Composant COM » puis « Atteindre »

Delà vous pouvez choisir entre les versions 2008 ou 2010 de Team Explorer.

vendredi 27 novembre 2009

Indicateurs pour vos projets avec PsTFS

Souvent, j'entends parler d'indicateurs projet et avec TFS soit nous utilisons Reporting soit Excel.

La version Reporting est assez lourde pour un chef de projet qui doit suivre l'évolution de son projet au quotidien. Excel quant à lui permet beaucoup de choses, cela fera l'objet d'un post prochainement, mais personnellement je préfère le bureau de Windows.

Certains d'entre vous connaisse peut être PowerGadget (http://www.softwarefx.com/sfxSqlProducts/powerGadgets/). Pour ceux qui ne connaissent pas, ce projet permet la création de gadget pour Vista ou Win 7. Il peut se connecter sur trois sources de données :

  • Web Service
  • Base de données
  • Commande PowerShell


Bien entendu pour ceux qui suivent mon blog, j'ai mes commandes Powershell pour TFS (http://PsTFS.Codeplex.com). Donc naturellement j'ai créé mes indicateurs pour gérer mes projets, en voici un exemple pour le suivi des bugs.

J'ai donc :

  • 1 bug actif
  • 7 bugs fermés
  • 5 bugs en attente d'être testé

Ces indicateurs sont mis à jour toutes les heures mais c'est entièrement et facilement paramétrable de 1s à 1h.

Pour avoir ce résultat, il suffit d'exécuter une de mes commandes de faire une petite boucle foreach et voilà :

Script pour récupérer les Bug Actif :

   1: $wis = get-Wis -tfs http://monServer:8080 -ProjectName MonProjet



   2: $count = 0



   3: foreach($w in $wis)



   4: { 



   5:     if($w.Fields["System.WorkItemType"].Value -eq "Bogue" -and $w.Fields["System.State"].Value -eq "Actif")



   6:     {



   7:         $count = $count + 1



   8:     }



   9: }



  10: $count




Simple non?



Faire la même chose pour les tâches :



 



Si vous souhaitez une démonstration contactez-moi : n.choulant@evaluant.com


samedi 21 novembre 2009

Quand le Web rencontre PsTFS

PsTS est déjà la rencontre entre PowerShell et TFS, les CmdLet que compose PsTFS permettent déjà beaucoup de choses (Ajout de WI, parcourt des Label, parcourt des projets, provider TFS...)

Aujourd'hui j'ai le plaisir de vous faire découvrir la pré version Alpha (et oui c'est ses débuts) mais les possibilités de l'outils que je vais vous présenter son prometteuses.
  • Ajout des WI par Interface Web
  • Parcourt des projets par Interface web
  • ...

Vous pourriez me dire que cela existe déjà (Team system web access) future Visual Studio 2010...

Mais PsTFS Web Admin va plus loin, si non quel est l'intérêt de le développer ;). Pouvoir exécuter des scripts powershell, personnaliser les CdmLet PsTFS à exécuter...


Mon exemple le plus concret est de devoir créer un projet TFS via une interface web avec l'ajout des comptes dans l'AD, envois de mail au membre de l'équipe avec toutes les informations du projet...

Ceci n'est pas possible aujourd'hui, bien que Antoine Habert est développé un outils super "PoshBoard", PsTFS Web Admin ne répond pas au même attente.

Vous pourrez développer vos propres scripts et créer le menu dans PsTFS Web Admin très facilement par fichier XML pour l'exécuter. Dans ce cas PsTFS Web Admin se chargera de vous présenter les paramètres à transmettre au script, de l'éxécuter et de vous donner le résultat.

Envoyer ses propres commandes powershell pour afficher la liste des projets de votre serveur TFS .

JQuery permet beaucoup de chose coté client. le trie, la recherche...

Les commandes powershell dont typé (Add, Get, Set, Remove etc..) La présentation changera suivant le typage des commandes souhaitées.

Par exemple les commandes de type Get vous seront présentés sous forme de Grille et les commandes typé Add sous forme de formulaire...

Les données générées dans powershell reste accéssible et cela vous permettra de suivre les différentes étapes.

Des élements graphique arriveront et permettront de générer des graphiques. Tableau de bord ? et oui, aujourd'hui en web nous ne pouvons utiliser que Reporting Service, par toujours pratique et pas en temps réel, et Excel service seulement si vous disposez de MOSS.

PsTFS Web Admin sera disponible en version Beta courant Décembre 2009, je vous invite à vous abonner au flux RSS de mon site pour avoir des nouvelles rapidement. Pour les plus pressé s vous pouvez me contacter par mail ( n.choulant@evaluant.com).

L'objectif finale est d'avoir un réel tableau de bord interactif pour Team Foundation Serveur sans devoir redévelopper un Add-in C# ou tout autre éléments. Un script Powershell est à la porté de tous ;)
A suivre bientôt sur : http://pstfswebadmin.codeplex.com/

dimanche 8 novembre 2009

Ecran de veille Team Build

Je ne l'aurais jamais imaginé et pourtant cela existe. Je manque souvant de place sur mon écran pour afficher des informations mais mon écran de veille ???

Et oui un écran de veille permettant de voir les build en cours :



Lien : http://teambuildscreensaver.codeplex.com

PsTFS Quick Reference

PsTFS arrive à plus de 30 commandes. Ces commandes permettent de créer un projet, de faire des branches, merge... et bien d'autre choses encore.

Ci retrouver n'est pas chose facile, et c'est pour cela que j'ai fait le PsTFS Quick Reference.




Ce document vous permettra d'utiliser des commandes assez facilement. Ce qu'il faut bien voir, c'est que les commandes PsTFS doivent être utilisées avec la puissance de Powershell.

Pour l'ajout d'utilisateur la commande "Add-MemberProject" se repose sur deux proriétés :

  • UserName
  • Roles

L'utilisation de Powershell permet de récupérer les informations d'un fichier text :

PsTFS > : $content = get-content C:\Users\Administrateur\Desktop\PowerShell\users.txt

PsTFS > : foreach ($line in $content) { $tab = $line.split("") ; Add-MemberProject -tfs $tfs -ProjectName VSTS.Noham -UserName $tab[0] -Roles $tab[1];}

Pour faire la différence avec deux répertoires de TFS il y a la commande "Get-Diff " cette commande permet d'avoir la liste des fichiers différents :

PS C:\> $item = Get-Diff -TFS $tfs -PathL "$\EvaTraining\Developpement" -PathR "$\EvaTraining\Integration"
Compared 1386
itemsSame: 1286
Diff: 55
Right Only: 12
Left Only: 33
PS C:\> $item FT
Information TypeDiff DateCheckInL DateCheckInR TypeItem
----------- ----------------------------------------
$/EvaTraining/Developpement/Co... Diff 14/09/2009 17:02:13 27/05/2009
18:37:03 File

Pas toujours facile de lire l'information dans la console Powershell, hors avec la verison V2 nous avons "Out-GridView", ce qui permet de faire :

$item Out-GridView

et d'avoir



Et le système de filtre



En plus vous trouverez dans la version V1.0.0.1 des correctifs et une nouvelle commande :
Get-MergeInfo -> Permet d'avoir les informations sur les fusions (Changeset)
Et une modification de la commande Get-Diff :
Lien vers PsTFS Quick Reference :
Emplacement pour la documentation :

mercredi 21 octobre 2009

Mes vidéos

Suite à un effacement des mes vidéos je viens de les reposter






Nouvelle version de PsTFS V1.0.0

La voici la nouvelle version, je l'ai nommé V1.0.0 car au vue de son utilisation tout ce passe très bien et j'ai enfin fait un setup d'installation.

Donc dans cette nouvelle version en plus du setup vous trouverez :
  • Add-QualityBuild Add a new Quality for a Build Project
  • Add-Workspace Add workspace in Team Foundation Server
  • Clear-Builds Cancel Build
  • Get-Build Get All build for a project
  • Get-Label
  • Get-AllChangesSinceLabel
  • Get-AllWorkspace Get all workspace for a TFS
  • Get-Workspace Get workspace for a Name and a owner

Merci à tous ceux qui me font des retours, cela permet de continuer à faire vivre ce projet.

Lien : http://pstfs.codeplex.com

Bon téléchargement

lundi 19 octobre 2009

Qu'est ce que Team Foundation Server ?

Souvant lors de mes interventions sur la présentation de TFS ou de sa mise en place, j'ai le sentiment que les possiblités de cet outils sont limités dans l'esprit de beaucoup de personnes.

Team Foundation Server ... découpons et traduisons ce que cela signifie :

  • Team -> équipe -> Une équipe est un groupe d'individus partenaires dans un but commun.
  • Foundation -> fondations -> Assises des structures d'une construction. Les fondations sont conçues en fonction de la nature des sols
  • Server -> Serveur -> Logiciel ou ordinateur destiné à fournir un service à distance aux applications client connectées au réseau

Dans cette difinition je ne vois pas :
  • TFS est un simple contrôler de code source
  • TFS est un outils pour tester
  • ...

Vous l'aurez peut être déjà compris, la notion première (pour moi) de cet outils est :

"Le travail collaboratif permet à chacun de poser les bases d'un projet et de permettre la contruction d'un application dans les meilleurs conditions, le tout sur un serveur"

Cela engloble bein sur :

  • Les tests
  • La répartition du travail
  • L'architecture du projet
  • La communication
  • L'ouverture sur des outils client (Visual Studio,Excel, Outlook, Web Service, Eclipse, Delphi...)
  • Des indicateurs (Qualité, Projet, Satisfaction client...)
  • La performence (l'accomplissement d'un tâche)
  • La satisfaction client (priomordial dans la réussite d'un projet)

Et tellement plus....

Cet outils n'est pas que tourné développement pour les développeur. Le développement d'un application implique plusieurs rôles :

  • Les développeurs
  • Les testers
  • Les architectes

Mais aussi

  • Les chefs de projets
  • Les responsable de service
  • Les DSI
  • Les utilisateurs finaux

Et oui je vous le dit, cet outils est un plus pour l'ensemble de la chaîne, de l'équipe afin de satifaire notre client.

vendredi 16 octobre 2009

Leçon 5 : Comment récupérer les membres d'un projet



Dans cette leçon, nous allons voir comment récupérer les membres d'un projet dans TFS. Certaines personnes font la liaison avec l'AD pour avoir ces informations, cette manière est lente.

Étape 1 : Création de la méthode
J'ai créé un objet que j'ai nommé PsGroups pour y stocker les groupes du projet et un objet PsMember pour y stocker les membres du projet et les affecter à un groupe (PsGroups).

La méthode prend deux paramètres :
Team FoundationServer : Serveur TFS sur le quel ce connecter
ProjectName : Nom du projet



public static List GetMembersProject(TeamFoundationServer tfs, string
ProjectName)


Étape 2 : Appel du service IGroupSecurityService pour la gestion des membres

Pour récupérer les informations les API de TFS nous propose le service IGroupSecurityService.


{
List lg = new List();
// Get a reference to the
version control service
VersionControlServer versionControl =
PsService.VCS(tfs);
IGroupSecurityService sec = PsService.IGSS(tfs);


Étape 3 : Récupération du projet

Il nous faut plus que le simple nom du projet, donc nous allons récupérer l'objet TeamProject avec le nom du projet passé en paramètre.


TeamProject tp =
versionControl.GetTeamProject(ProjectName);


Etape 4 : Récupération des groupes

La méthode ListApplicationGroups permet de récupérer les groupes, pour chaque groupe nous allons créer un PsGroups.


Identity[] appGroups =
sec.ListApplicationGroups(tp.ArtifactUri.AbsoluteUri);
foreach (Identity
group in appGroups)
{
Identity[] groupMembers =
sec.ReadIdentities(SearchFactor.Sid, new string[] { group.Sid },
QueryMembership.Expanded);
foreach (Identity member in groupMembers)
{
PsGroups pg = new PsGroups();
pg.AccountName = member.AccountName;
pg.Deleted = member.Deleted;
pg.Description = member.Description;
pg.DisplayName = member.DisplayName;
pg.DistinguishedName =
member.DistinguishedName;
pg.Domain = member.Domain;
pg.MailAddress =
member.MailAddress;
pg.MemberOf = member.MemberOf;
pg.SecurityGroup =
member.SecurityGroup;
pg.Sid = member.Sid;
pg.SpecialType =
member.SpecialType;
pg.Type = member.Type;
pg.Members = new
List();
pg.TypeMember = TypeMember.TFS;

Étape 5 : Récupérer les membres d'un groupe

Pour savoir si un groupe à des membres :


if (member.Members != null)
{

Ensuite nous parcourons les membres et créons des objet PsMember.


foreach (string memberSid in member.Members)
{
Identity memberInfo = sec.ReadIdentity(SearchFactor.Sid, memberSid,
QueryMembership.None);
PsMember pm = new PsMember();
pm.AccountName =
memberInfo.AccountName;
pm.Deleted = memberInfo.Deleted;
pm.Description
= memberInfo.Description;
pm.DisplayName = memberInfo.DisplayName;
pm.DistinguishedName = memberInfo.DistinguishedName;
pm.Domain =
memberInfo.Domain;
pm.MailAddress = memberInfo.MailAddress;
pm.MemberOf
= memberInfo.MemberOf;
pm.SecurityGroup = memberInfo.SecurityGroup;
pm.Sid = memberInfo.Sid;
pm.SpecialType = memberInfo.SpecialType;
pm.Type = memberInfo.Type;
pg.Members.Add(pm);
}
}

Étape 6 : Renvois d'une liste

Pour finir nous ajoutons l'objet PsGroups à la liste et renvoyons cette liste.


lg.Add(pg);
}
}
return lg;
}

samedi 15 août 2009

Un peu d'animation

Bonjour

Il n'est pas dans mes coutumes de vous présenter d'autre chose que la gestion de projet, mais voici un site créé par un ami et entièrement animé par cet ami.


Vous y trouverez un ensemble de jeux, d'illustrations ...

Cet ami est illustrateur indépendant, donc si jamais vous avez un besoin contactez le ;)


lundi 27 juillet 2009

Nouvelle version de PsTFS

Une nouvelle version de PsTFS est publiée. Cette version corrige de petit bug.

Deux nouvelles commandes ont été ajoutées :
Get-LastVersion : Permettant de récupérer la dernière version d'un projet ou une partie
Get-SpecificVersion : Permettant de récupérer une version d'un projet ou une partie par rapport à un label, date ou changeset.

Lien : http://PsTFS.codeplex.com

mercredi 24 juin 2009

MSDAYS de strasbourg : VSTS, TFS 2010 et EPM 2007

Je vous propose de revoir ou de découvrir la présentation que j'ai donné lors des MSDAYS de strasbourg qui ce sont déroullés le 23 Juin à Strasbourg.




Les démos non pas été encore filmés, je suis entrain de les préparer, je les posterai au plus vite.

Si vous souhaitez plus d'informations laissez un commentaire.

mercredi 17 juin 2009

Comment visualiser les dépendences de code

Dans la suite des nouveaut de VSTS 2010 je vous propose de voir dans cette vidéo, comment nous pouvons voir facilement les dépendences dans mon code, soit par 'Class', 'Namespace' ou 'Assembly':



Bonne vidéo ;)

mardi 16 juin 2009

Comment TFS peux m'aider dans le Debug

Dans la serie des "Comment faire" comment VSTS peux vous aider et donc gagner du temps avec le debug.

Je vous propose une vidéo pour mieux comprendre:

<br/><a href="http://video.msn.com/video.aspx?vid=89773215-1161-4433-bede-237cae63cfd6" target="_new" title="Historique du debug">Video: Historique du debug</a>

Pour toutes questions laissez un commentaire...

Comment voir les branches et l'historique dans TFS 2010 ?

C'était un manque dans les version 2005 et 2008 de TFS, la visualisation graphique des branches et des changset.

Ce manque est aujourd'hui comblé, je vous invite à visioner la vidéo que j'ai fait:


<br/><a href="http://video.msn.com/video.aspx?vid=d05cd57a-f31c-4fac-88f5-238922147da7" target="_new" title="Gestion des branches et changeset">Video: Gestion des branches et changeset</a>

Si vous avez des questions n'hesitez pas à me laisser un commentaire.

vendredi 29 mai 2009

3 ème Salon des nouvelles technologies et des entrepreneurs




Bonjour

Venez découvrir le 3 ème Salon des nouvelles technologies et des entrepreneurs, je serais présent et cela sera l'occasion de nous rencontrer et de discuter.



Venez nombreux

mercredi 27 mai 2009

Installation de TFS 2010 BETA 1 en mode personnalisé

Florent SANTIN nous livre trois bon articles sur l'installation de TSF 2010 en mode par défaut.

Dans ce poste je vais m'efforcer de vous montrer l'installation personnalisée de TFS 2010, je vous rappel que ce n'est encore qu'une version BETA.

Pour commencer lisez les articles de Florent ;)

Ensuite sur la page d'accueil de l'installation choisir "Custom Configuration" et vous arrivez sur cet écran :

Dans l'écran "Configuration DataBase" indiquer les informations de SQL Server, petite nouveauté, il est possible de préfixer vos bases de données, dans mon exemple je l'ai préfixer par Evaluant.
Dans l'écran "Application tier" indiquer les informations le compte system et les informations sur le site TeamFoundationServer. Il est à noter que dans cette nouvelle version il est enfin possible de choisir le nom du site et le port de communcation

Dans l'écran "Reporting" cocher la case pour configurer Reporting avec TFS.

Dans l'écran "Reporting Service" indiquer le serveur de rapports et les URL

Dans l'écran "WareHouse" indiquer le serveur à utiliser pour gérer le cube OLAP, pour rappel le cube OLAP vous permet la création de rapports.

Dans l'écran "Report Reader Account"  indiquer le compte à utiliser.

Dans l'écran "Sharepoint" cochez la case pour configurer SharePoint pour TFS

Dans l'écran "Setting" vérifier les informations de connection à WSS si comme moi vous aviez installé WSS avant TFS. Cela permet également de ce connecter sur un MOSS.

Dans l'écran "Project Collection" indiquez la collection de projets que vous souhaitez. Ceci est une nouveauté et me sera personnellement très utile. 
En effet dans cette nouvelle version le terme de collection de projets va permettre de mettre de l'ordre dans les projets soit par service, par société (pour les SSII), par catégorie (Taille, méthodologie...). Chaque Collection de projet a ça propre base de données, son propre portail de collection de site. C'est une grande et bonne idée.

Dans l'écran "Review" vous pourrez visualiser les paramètres.

Dans l'écran "Readiness Checks" l'application vérifie que vos paramètres soit bon.

Une fois vérifié vous pouvez lancer la configuration, nous ne parlons pas d'installation mais bien de configuration. Pour l'installation voyez l'article de Florent.

Une fois la configuration terminé si tout c'est bien passé vous devriez avoir cet écran.


Mes tests ce sont déroulés sur un Windows Server 2003 R2 SP2 avec SQL Server 2008 et WSS 3.0 SP2. Je vous recommande de faire les tests sur une machine virtuelle.

Si vous souhaitez une présentation de VSTS 2010, contactez moi : n.choulant@evaluant.com

Pour ceux d'entre vous qui seront du coté de strasbourg le 23 Juin venez aux MS Day, je serais présent.

Leçon 4 : Comment récupérer les éléments d'un projet dans un TreeView


    Dans la Leçon 2  nous avions vue comment récupérer des éléments (fichiers, répertoires) dans TFS pour un projet donné.

     

    Dans cette leçon, nous allons voir comment mettre ces éléments dans un TreeView.

     

    Etape 1 : Création du TreeView

     

    Rien de bien compliqué.

    TreeView trvItem = new TreeView();

     

    Etape 2 : Création d'une méthode de base

    Nous allons créer une première méthode que l'on pourra appeler de n'importe où.

     

    Elle prend 3 arguments:

  1. Un objet de type VersionControlServer permettant la récupération.
  2. Le chemin à partir du quel rechercher les enfants
  3. Un TreeView contenant les éléments trouvés
  4.  

    private void GetAllItem(VersionControlServer vcs, string path, TreeView trvItem)

    {

    GetAllItem(vcs, path, trvItem.Nodes.Add("$"));

    }

     

    Etape 3: Création d'une méthode récursive

     

    Méthode récursive permettant de parcourir niveau par niveau les éléments.

     

  5. Objet de type VersionControlServer permettant la récupération
  6. Le chemin à partir du quel recherché les enfants
  7. Le TreeNode contenant les éléments trouvés
  8.  

    private void GetAllItem(VersionControlServer vcs,string path,TreeNode trnParent)

    {

     

    Code Complet :

     

    TreeView trvItem = new TreeView();

     

    private void GetAllItem(VersionControlServer vcs, string path, TreeView trvItem)

    {

    GetAllItem(vcs, path, trvItem.Nodes.Add("$"));

    }

    private void GetAllItem(VersionControlServer vcs,string path,TreeNode trnParent)

    {

    //Récupération des éléments du niveau en cours

    //Utilisation de RecursionType.OneLevel pour n'avoir que le niveau en cour

    //Cela permet de connaitre la hiérarchie

    ItemSet itemSet = vcs.GetItems(path, RecursionType.OneLevel);

    //Parcour des éléments trouvé

    foreach (Item item in itemSet.Items)

    {

    //Vérification du type d'item

    //Un répertoire peut avoir des sous éléments mais pas un fichier

                    if (item.ItemType == ItemType.Folder)

                    {

                        //Ajout du noeud en cours

                        TreeNode trn = trnParent.Nodes.Add(item.ServerItem.Replace(path, string.Empty));

                        //Récursion sur la méthode pour la récupération des éléments

                        GetAllItem(vcs, item.ServerItem, trn);

                    }

                    else

                    {

                        //Pour un fichier ajout du noeud

                        trnParent.Nodes.Add(item.ServerItem.Replace(path, string.Empty));

                    }

                }

       }

         

mercredi 6 mai 2009

Leçon 3 : Comment ajouter un fichier ?


 
Pour ajouter un fichier ou plusieurs il est nécéssaire de passer par VersionControlServer (Voir Leçon 2).
 
Une fois le versionControlServer récupéré il faut créer un Workspace pour travailler.
 
Etape 1: Création du workspace
Workspace workspace = versionControl.CreateWorkspace(Guid.NewGuid().ToString(), versionControl.AuthenticatedUser);
 
Je passe Guid.NewGuid() pour pouvoir créer un workspace qui ne rentrera pas en conflit avec un existant.
 
Etape 2: Récupération des fichiers du serveur dans le workspace
 
Paramétrage de la liaison serveur <-> local
workspace.Map(Target, tmp); 
"Target" représente la destination, l'endroit où sera ajouté le fichier .
"tmp" représente l'emplacement sur le disque dur en local.
 
Action de récupération
workspace.Get();
               
 Etape 3: Ajout du fichier dans le workspace
On edit du coté local donc dans le workspace
workspace.PendEdit(fileTarget);
Puis on ajout le fichier
workspace.PendAdd(fileTarget);
Copie du fichier dans le workspace

File.Copy(_s, fileTarget, true);
Ajout du fichier. 
workspace.PendAdd(fileTarget, (Recursion == RecursionType.Full));
Etape 4: Gestion des modifications en cours
 
Affiche les changement en cour.

PendingChange[] pendingChanges = workspace.GetPendingChanges();
 
Parcour les fichier en attente
    
foreach (PendingChange pendingChange in pendingChanges)
{
         Console.WhritLine("  path: " + pendingChange.LocalItem +
                                      ", change: " + PendingChange.GetLocalizedStringForChangeType(pendingChange.ChangeType));
}
           
Etape 5: Archivage
 
Archive les fichiers et récupère le changeset 
int changesetNumber = workspace.CheckIn(pendingChanges, Description);
 

Leçon 2 : Comment récupérer les fichiers du controler de code source


 

Dans cette leçon je vous propose d'apprendre ou de revoir comment il est possible de récupérer les éléments du contrôler de version.

 

Team Foundation Server permet de gérer le code source d'une application (Projet) et son historique.

 

Que représente l'historique ?

 

Ligne de temps d'un projet

--------------->--------------------->----------------->------------------>------------------------>------------------------>-------...

Initialisation du projet

Modification du code n°123

Modification du code n°127

Modification du code n°168

Modification du code n°201

Modification du code n°309

 

Chaque modification de code se nomme "ChangeSet". A chaque archivage de code d'un développeur un "ChangeSet" est créé avec l'ensemble des éléments qui ont été modifiés.

 

Les API de TFS permettent de récupérer les fichiers qui sont donc les stocker dans le contrôler de version et leurs modifications.

 

Etape 1: Les "USING"

Pour utiliser les éléments il faut les using suivant:

using Microsoft.TeamFoundation.Client;

using Microsoft.TeamFoundation.VersionControl.Client; 

 

Etape 2: Connexion au contrôler de version

Pour la connexion au serveur veuillez voir la leçon 1.

L'objet "Tfs" est l'objet TeamFoundationServer permettant la connexion au serveur.

 

VersionControlServer   vcs = (VersionControlServer)Tfs.GetService(typeof(VersionControlServer));

 

La méthode "GetService" de l'objet "TeamFoundationServer" permet de récupérer un type de service. Nous verrons dans les prochaines leçons qu'il existe plusieurs services possibles. Dans le cadre de cette leçon nous nous pencherons sur le service "VersionControlServer" permettant de travailler avec les éléments (fichiers, répertoires, historique…).

 

Etape 3: Récupérer les éléments d'un projet

 

"VersionControlServer" contient une méthode nommé "GetItems" qui permet la récupération des éléments. Elle prend deux paramètres, un chemin (Ex: $/MonProjet) et un type de recrutions (Ex: RecursionType.Full), Full permet de récupérer l'ensemble des éléments de tous les répertoires et sous-répertoires.

 

ItemSet itemSet = vcs.GetItems("$/MonProjet", RecursionType.Full);

 

Tout chemin doit commencer par "$/" c'est comme pour le disque dur qui lui commence par exemple par "C:/".

 

L'objet "ItemSet" contient une collection d' "Items" qui représente chaque élément.

 

ATTENTION, si vous utilisez l'argument "RecursionType.Full" les items ne sont dans récupérés avec cette notion de hiérarchie.

 

Exemple :

Si dans mon contrôler de version j'ai :

$/MonProjet/

----------------DEV/

----------------------Fichier.cs

----------------------Image.jpg

----------------DEV2/

----------------------Fichier2.cs

----------------------Image2.jpg

 

Ma collection d' "Items" pourrais être représenté de cette manière:

Items[0].ServerItem = $/MonProjet/

Items[1].ServerItem = $/MonProjet/DEV/

Items[2].ServerItem = $/MonProjet/DEV/Fichier.cs

Items[3].ServerItem = $/MonProjet/DEV/Image.jpg

Items[4].ServerItem = $/MonProjet/DEV2/

Items[5].ServerItem = $/MonProjet/DEV2/Fichier2.cs

Items[6].ServerItem = $/MonProjet/DEV2/Image2.jpg

 

 

Vous l'aurez compris la propriété "ServerItem" permet de récupérer le nom et chemin de l'item. Mais cela ne nous permet pas de récupérer facilement, sous forme de treeview par exemple, le contenu de notre projet. Nous verons dans la prochaine leçon comment faire.

 

Dans ce cas de figure il n'est pas facile de savoir ce qui est un fichier et ce qui est un répertoire. Pour ce faire un item contient également la propriété "ItemType" permettant de le savoir.

 

Etape 4 : Récupérer l'historique d'un fichier.

 

Dans l'exemple suivant nous allons récupérer l'historique du fichier

IEnumerable cs = versionControl.QueryHistory("$/MonProjet/Dev/Fichier.cs", VersionSpec.Latest, 0, RecursionType.Full, null, null, null, Int32.MaxValue, true, true);

 

foreach (Changeset c in cs)

{

if (c.Changes.Length > 0)

{

foreach (Change ch in c.Changes)

{

Item i = ch.Item;

ChangeType t = ch.ChangeType;

if (t == ChangeType.Add)

MessageBox.Show("Fichier ajouté");

}

}

}