Обычно вы используете ct findmerge
, чтобы найти файлы для объединения из одной ветви или просмотра в текущем представлении (предполагая, что ct
является псевдонимом для cleartool
).
Я думаю, вам придетсяопределите все интересующие вас филиалы и выполните отдельную операцию ct findmerge
для каждого филиала - для каждого филиала назначения.Это сложно.Вы также хотели бы иметь возможность удалить много веток, которые, как известно, полностью объединены.Вы можете аннотировать ветку, чтобы указать, что она полностью объединена.
Итак, я не думаю, что есть простая, единственная команда для выполнения этой работы.
Вам необходиморешить, какие ветви являются целями, которые вас беспокоят.Это будут ваши интеграционные ветви.Предположительно, у вас есть довольно небольшой список из них.
Для каждой из этих целевых ветвей вам необходимо решить, какие рабочие ветви относятся к этой ветви интеграции.Это сложная часть;нет простого способа определить, относится ли конкретное исправление ошибки или ветвь функции к этой ветке интеграции, используя информацию в VOB;на самом деле он известен только пользователям.
Затем вам понадобится скрипт, который выполняет (в общих чертах):
for int_branch in $(list_relevant_integration_branches)
do
...create view with tag $tag for $int_branch...
ct setcs -f $(cspec_for_integration_branch $int_branch) $tag
ct setview -exec "find_outstanding_merges_for_integration_branch $int_branch" $tag
done
, где find_outstanding_merges_for_integration_branch
выглядит примерно так:
vob_list=$(list_relevant_vobs)
for mrg_branch in $(list_relevant_merge_branches $int_branch)
do
echo
echo "Merges from $mrg_branch to $int_branch"
ct findmerge $vob_list -fversion .../$mrg_branch/LATEST -print
done
Обратите внимание, что в этой команде предполагается, что (a) текущее представление подходит для цели, и (b) имя ветви интеграции передается в качестве аргумента.
Вы можете придумать и решить, как обрабатыватьавтоматическое или графическое слияние вместо -print
.Сложной частью по-прежнему остаются неписанные команды, такие как list_relevant_integration_branches
и list_relevant_vobs
.Они могут быть простыми:
# list_relevant_integration_branches
cat <<EOF
integration_branch_version_3_0
integration_branch_version_3_1
integration_branch_version_4_0
EOF
# list_relevant_vobs
cat <<EOF
/vobs/mainproject
/vobs/altproject
/vobs/universal
EOF
Или они могут быть значительно более сложными.(Если у вас есть только один VOB, то ваша жизнь намного проще; системы, с которыми мы работаем, имеют 20 с лишним VOB, видимых в cspec.)
Другой неписаный скрипт - list_relevant_merge_branches
.Я не знаю, есть ли простой способ написать это.Если вы определяете и применяете соответствующие типы атрибутов (ct mkattype
, ct mkattr
) при создании ветвей разработки (возможно, тип атрибута «целевая ветвь интеграции», тип перечисления), вы можете использовать это для руководства.Это оставляет вас с проблемой модернизации;как получить правильный атрибут для каждой существующей рабочей ветви.Вам также нужен отдельный атрибут, чтобы идентифицировать ветви, которые больше не нуждаются в проверке слиянием, если только вы не решите, что отсутствие атрибута «целевой ветви интеграции» означает «больше не нужно проверять».Это уменьшает проблему модернизации до добавления целевой ветви интеграции к тем ветвям, которые все еще нуждаются в объединении;по умолчанию все существующие ветви будут считаться полностью объединенными.