Это означает мой предыдущий вопрос о TFS 2010 и возможность создания журнала изменений.
Я раньше использовал метки для идентификации версии программы, но поскольку метки не являются фиксированными точками во времени, теперь я использую ветки.
Вот как выглядит иерархия ветвей:
Как вы можете видеть, существуют два разных приложения, которые являются ветвями соединительной линии: APP_A
(приложение A) и APP_B
(приложение B). Оба они почти идентичны, но есть некоторые функциональные различия.
Вот процесс создания новой версии приложения (скажем, версия 1.3):
- Изменен
Main trunk
(добавлены новые функциональные возможности, исправлены ошибки...) - Из измененного
Main trunk
создается новая ветвь:Main trunk 1.3
-
APP_A
ветвь может быть изменена, поэтому уникальные функцииAPP_A
будут работать с модификацией версии 1.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 и, следовательно, свой журнал изменений.
Здесь моя проблема: как я могу получить список ВСЕ наборов изменений, которые "связаны" с указанной ветвью? Я использую API TFS 2010 для кода С#.
Ввод моей программы (которая будет извлекать все команды изменений для указанной ветки) будет именем ветки (скажем 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
в моем случае)...
У кого-нибудь есть идея?
Кроме того, приветствуются любые лучшие идеи для получения изменений между двумя ветками... спасибо.