通常,您使用
ct findmerge
从一个分支或视图中查找要合并到当前视图中的文件(假设
ct
是
cleartool
的别名)。
我认为您需要识别您感兴趣的所有分支,并为每个目标分支执行单独的
ct findmerge
操作。这很复杂。您还想能够消除已知已完全合并的许多分支。您可以注释一个分支以指示它已完全合并。
因此,我认为没有一个简单的单一命令来完成这项工作。
您需要决定哪些分支是您关心的目标。这些将是您的集成分支。假定您有一个相当小的列表。
对于每个目标分支,您需要决定哪些工作分支与该集成分支相关。这是棘手的部分;没有一种简单的方法可以使用VOBs中的信息确定特定的错误修复或功能分支是否与该集成分支相关;这实际上只有用户知道。
然后,您需要一个脚本执行以下操作(概述):
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。这些可能很简单:
cat <<EOF
integration_branch_version_3_0
integration_branch_version_3_1
integration_branch_version_4_0
EOF
cat <<EOF
/vobs/mainproject
/vobs/altproject
/vobs/universal
EOF
或者它们可能更加复杂。(如果你只有一个VOB,那么你的生活要简单得多;我们所使用的系统在cspec中可见20个以上的VOB。)
另一个未写出的脚本是list_relevant_merge_branches
。我不知道是否有一种简单的方法来编写它。如果你在创建开发分支时定义并应用适当的属性类型(ct mkattype
, ct mkattr
)(可能是“目标集成分支”属性类型,枚举类型),你可以用它来指导你。这使得你面临一个改装问题;如何将正确的属性添加到每个现有的工作分支上。你还需要一个单独的属性来识别不再需要合并审查的分支,除非你决定缺少“目标集成分支”属性意味着“不再需要审查”。这可以将升级问题减少到将目标集成分支添加到仍需要合并的分支上;默认情况下,所有现有的分支都将被视为已完全合并。