Я ищу способ автоматического создания журнала изменений (фактически списка рабочих элементов) между двумя версиями моего приложения. У меня две версии моего приложения: v1 и v2, каждый из которых идентифицируется меткой в TFS 2010 (LABEL1 и LABEL2), которую я создал вручную, прежде чем создавать настройки моего приложения. У меня есть ветвящаяся система, что означает, что у меня есть багажник, большинство исправлений исправлено, и ветвь, где исправления применяются в основном с использованием слияний с магистралью (но также есть некоторые исправления только для ветки, которые не относятся к магистрали), Две версии моего приложения (v1 и v2) - это версии из ветки.
Я бы хотел, чтобы TFS 2010 смог вернуть список ошибок, которые были исправлены (т.е. список рабочих элементов с типом = ошибка, которые закрыты и проверены) между этими двумя метками.
Я пытался добиться этого с помощью веб-интерфейса TFS 2010 или с помощью Visual Studio, но я не нашел никакого способа.
Затем я попытался спросить tf.exe для истории, используя следующую командную строку:
tf history /server:http://server_url/collection_name "$/project_path" /version:LLABEL1~LLABEL2 /recursive /noprompt /format:brief
где LABEL1 - это метка, связанная с исходным кодом v1 приложения, и LABEL2 - метка, которая была связана с исходным кодом v2 приложения. Фактически это происходит не двумя способами: - командная строка возвращает список списков изменений, а не список связанных закрытых рабочих элементов - список наборов изменений содержит только набор изменений, которые я применил к самой ветке, а не к наборам изменений, которые я также применял, и к соединительной линии, а затем присоединился к ветке. Установка или отсутствие параметра "/slotmode" ничего не меняет.
Там я попытался написать кусок кода С#, чтобы получить список рабочих элементов (а не список наборов изменений):
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://server_url/collection_name"));
VersionControlServer controlServer = tfs.GetService<VersionControlServer>();
VersionControlServer vcs = tfs.GetService<VersionControlServer>();
VersionSpec sFrom = VersionSpec.ParseSingleSpec("LLABEL1", null);
VersionSpec sTo = VersionSpec.ParseSingleSpec("LLABEL2", null);
var changesets = vcs.QueryHistory(
"$/project_path",
sTo,
0,
RecursionType.Full,
null,
sFrom,
sTo,
int.MaxValue,
true,
false); // Slotmode to false
Dictionary<int, WorkItem> dico = new Dictionary<int, WorkItem>();
foreach (Changeset set in changesets)
{
foreach (WorkItem zz in set.WorkItems)
{
if (!dico.ContainsKey(zz.Id))
{
dico.Add(zz.Id, zz);
}
}
}
foreach (KeyValuePair<int, WorkItem> pair in dico.OrderBy(z => z.Key))
{
Console.WriteLine(string.Format("ID: {0}, Title: {1}", pair.Key, pair.Value.Title));
}
Это действительно работает, я получаю список рабочих элементов между двумя моими ярлыками, которые на самом деле я хотел. Но учитываются только рабочие элементы, связанные с наборами изменений, которые были зафиксированы на самой ветке: рабочие элементы типа "ошибка", которые были решены на соединительной линии, затем объединены с ветвью, не отображаются. Slotmode ничего не меняет.
Затем я, наконец, попытался заменить VersionSpecs, которые были определены меткой с VersionSpecs, которые определены наборами изменений:
VersionSpec sFrom = VersionSpec.ParseSingleSpec("C5083", null);
VersionSpec sTo = VersionSpec.ParseSingleSpec("C5276", null);
И мой код, наконец, работает.
Итак, мой вопрос: как я мог получить тот же результат с ярлыками, которые являются объектами TFS, которые я использую для идентификации версии? Если это невозможно, как определить версию в TFS 2010? спасибо.
Btw Я нашел несколько вопросов о stackoverflow, но ни один из них не дал мне ответов с метками. Например: Пример вопроса