Ceci suit my previous question à propos de TFS 2010 et la possibilité de créer un journal des modifications. J'ai précédemment utilisé des étiquettes pour identifier une version du programme, mais comme les étiquettes ne sont pas des points fixes dans le temps, maintenant j'utilise des branches.TFS2010: Récupérer tous les changesets associés à une branche (récursivité complète)
Voilà comment la hiérarchie de la branche ressemble à:
Comme vous pouvez le voir, il y a deux applications différentes qui sont des branches du tronc: APP_A
(application A) et APP_B
(application B). Les deux sont presque identiques, mais il y a quelques différences fonctionnelles.
Voici le processus de création d'une nouvelle version de l'application (par exemple la version 1.3):
- Le
Main trunk
est modifié (de nouvelles fonctionnalités sont ajoutées, des corrections de bugs ...) - De modifié
Main trunk
, une nouvelle branche est créée:Main trunk 1.3
- branche
APP_A
peut être modifié, des fonctionnalités uniques afin deAPP_A
travaillera avec la modification de v1.3 APP_B
branche peut être modifiée, de sorte que des fonctionnalités uniques deAPP_B
travailleront avec la modification de v1.3Main trunk 1.3
est fusionné àAPP_A
etAPP_B
, afin que les deuxAPP_A
etAPP_B
applications reçoivent les modifications duMain trunk
- De la modification
APP_A
branche , une nouvelle branche est créée:APP_A_1.3
- de la branche
APP_B
modifiée, une nouvelle branche est créée:APP_B_1.3
Mon but est de pouvoir produire un changelog entre APP_A_1.3
et APP_A_1.2
.
Par changelog, je veux dire une liste de WorkItems. Chaque ensemble de modifications qui est archivé est associé à un ou plusieurs éléments de travail (par exemple, un élément de bogue). Je voudrais pouvoir obtenir la liste de tous les workitems qui ont été liés à un changeset qui a affecté : ces changesets pourraient provenir du Main trunk
(étape 1 ci-dessus), du APP_A branch
(étape 3 ci-dessus) ou même du APP_A_1.3
branche lui-même (si les correctifs sont archivés après la création de la branche).
Pour obtenir cette liste des éléments de travail, j'ai essayé de la liste de tous les changesets qui sont « liés » à APP_A_1.2
(« lié » = le code qui a été vérifié dans la changeset est maintenant sur la branche APP_A_1.2
) et la liste de tous les changesets qui sont "liés" à APP_A_1.3
. Puis, je serai en mesure de savoir quels changesets sont "liés" à APP_A_1.3
et non "liés" à APP_A_1.2
.A partir de ce sous-ensemble de changesets, j'obtiendra tous les WorkItems associés et ainsi mon changelog.
Voici mon problème: comment puis-je obtenir la liste des TOUS les changements qui sont "liés" à une branche spécifiée? J'utilise l'API TFS 2010 pour le code C#.
L'entrée de mon programme (qui récupérerait tous les changesets pour une branche déterminée) serait le nom de la branche (par exemple APP_A_1.2
), et la sortie serait la liste des changesets suivants:
- changesets appliquée sur
APP_A_1.2
branche elle-même - changesets appliqué sur la branche
APP_A
avantAPP_A_1.2
a été créé - changesets appliquée sur la branche
Main trunk 1.2
avant qu'il ait été fusionné pourAPP_A
- changesets appliquées sur
Main trunk
branche avantMain trunk 1.2
a été créé
J'ai écrit les morceaux de code ci-dessous pour obtenir tous les changesets:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1ChangeSets = myVersionControlServer.QueryHistory(
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
0,
RecursionType.Full,
null,
null,
null,
int.MaxValue,
false,
false).OfType<Changeset>().Select(z => z.ChangesetId).ToList();
Même si RecursionType.Full
est spécifié, le code ci-dessus seulement renvoie les changesets qui ont été archivés sur la branche APP_A_1.2
elle-même. Ceci est identique à la commande "Historique" dans la vue Explorateur de code source dans Visual Studio.
Alors j'ai essayé le morceau de code suivant:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1MergedChangeSets = myVersionControlServer.QueryMerges(
null,
null,
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
null,
null,
RecursionType.Full).Select(z => z.SourceVersion).ToList();
Ce retour changesets qui ont été vérifiés dans le APP_A_1.2
branche + ceux qui ont été cheked-est dans la branche APP_A
avant APP_A_1.2
a été créé. Beaucoup mieux, mais pas suffisant. Je ne peux pas trouver un moyen de faire fonctionner la récursivité avec des branches qui sont "au-dessus" APP_A
(Main trunk
dans mon cas) ...
Quelqu'un a une idée?
De plus, toutes les meilleures idées pour obtenir le changelog entre deux branches sont les bienvenues ... Thx.
Bonne question! ATM vous êtes bloqué avec comment récupérer avec précision les Changesets. Une fois que vous les aurez, considérez cet article fantastique par B.Hodges, qui vous aidera à corréler une liste de Changesets avec une liste d'éléments de travail: http://blogs.msdn.com/b/buckh/archive/2012 /02/01/listing-the-work-items-associated-with-changesets-for-a-path.aspx – pantelif