Далее следует мой предыдущий вопрос о TFS 2010 и возможности создания журнала изменений.
Ранее я использовал ярлыки для определения версии программы, но поскольку ярлыки не являются фиксированными моментами времени, теперь я использую ветки.
Вот как выглядит иерархия ветвей:
Как видите, есть два разных приложения, которые являются ветвями магистрали: APP_A
(приложение A) и APP_B
(приложение B). Оба они почти идентичны, но есть некоторые функциональные различия.
Вот процесс создания новой версии приложения (скажем, версия 1.3):
- Изменен
Main trunk
(добавлены новые функции, исправлены ошибки ...)
- Из измененного
Main trunk
создается новая ветка: Main trunk 1.3
APP_A
может быть изменена, поэтому уникальные функции APP_A
будут работать с модификацией v1.3
APP_B
может быть изменена, поэтому уникальные функции APP_B
будут работать с модификацией v1.3
Main trunk 1.3
объединяется с APP_A
и APP_B
, поэтому приложения APP_A
и APP_B
получают модификации Main trunk
- Из модифицированной ветви
APP_A
создается новая ветка: APP_A_1.3
- Из модифицированной ветки
APP_B
создается новая ветка: APP_B_1.3
Моя цель - создать журнал изменений между APP_A_1.3
и APP_A_1.2
.
Под журналом изменений я подразумеваю список WorkItems. Каждый зарегистрированный набор изменений связан с одним или несколькими WorkItem (например, элементом Bug). Я бы хотел получить список всех рабочих элементов, которые были связаны с набором изменений, повлиявшим на APP_A_1.3
: эти наборы изменений могут быть получены из Main trunk
(шаг 1 выше), APP_A branch
(шаг 3 выше) или даже сама ветка APP_A_1.3
(если исправления возвращаются после создания ветки).
Чтобы получить этот список рабочих элементов, я попытался получить список всех наборов изменений, которые «связаны» с APP_A_1.2
( «связаны» = код, который был зарегистрирован в набор изменений теперь находится на ветке APP_A_1.2
) и список всех наборов изменений, которые «связаны» с APP_A_1.3
.
Затем я смогу узнать, какие наборы изменений «связаны» с APP_A_1.3
, а не «связаны» с APP_A_1.2
. Из этого подмножества наборов изменений я получу все связанные WorkItems и, следовательно, свой список изменений.
Вот моя проблема: как я могу получить список ALL наборов изменений, которые "связаны" с указанной веткой? Я использую TFS 2010 API для кода C #.
Входная информация моей программы (которая будет извлекать все наборы изменений для указанной ветви) будет именем ветви (скажем, APP_A_1.2
), а выходные данные будут списком следующих наборов изменений:
- ревизий, примененных к
APP_A_1.2
самой ветви
- ревизий, примененных к ветке
APP_A
до создания APP_A_1.2
- ревизии, примененные к ветке
Main trunk 1.2
до ее объединения в APP_A
- ревизий, примененных к ветке
Main trunk
до создания Main trunk 1.2
Я написал следующие фрагменты кода, чтобы получить все эти наборы изменений:
// 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();
Даже если указано RecursionType.Full
, приведенный выше код только возвращает наборы изменений, которые были зарегистрированы в самой ветви APP_A_1.2
. Это идентично команде «Журнал» в представлении «Исходный код» в Visual Studio.
Затем я попробовал следующий фрагмент кода:
// 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();
Возвращает наборы изменений, которые были зарегистрированы в ветви APP_A_1.2
+ те, которые были проверены в ветви APP_A
до создания APP_A_1.2
. Намного лучше, но не достаточно. Я не могу найти способ заставить рекурсию работать с ветками, которые "выше" APP_A
(Main trunk
в моем случае) ...
У кого-нибудь есть идея?
Кроме того, любые лучшие идеи для получения журнала изменений между двумя ветвями приветствуются ...
Thx.