如何查询ClearCase VOB中特定日期后打标签的所有元素版本
ClearCase查询优化:找出特定日期后打标签的元素版本(无重复)
需求
找出VOB中所有带有特定日期之后应用标签的元素版本,要求避免元素因关联多个符合条件标签而重复输出,同时优化现有命令的执行效率。
用户原命令
cleartool lstype -kind lbtype -short -invob MY_VOB > /tmp/All_VOB_labels.txt for SOME_LABEL in $(cat /tmp/All_VOB_labels.txt ) do cleartool find . -version "lbtype($SOME_LABEL)" -exec "cleartool lshistory -since 28-Feb -minor $CLEARCASE_XPN " done
优化方案
方案一:单次遍历+历史检查+去重
直接遍历版本并检查其打标签历史,无需提前导出所有标签,最后通过去重避免重复输出:
cleartool find . -version -exec 'cleartool lshistory -since 28-Feb -minor "$CLEARCASE_XPN" | grep -q "create label"' -print | sort -u
- 核心逻辑:对每个版本,检查其历史记录中是否在指定日期后存在打标签(
create label)操作 -print输出符合条件的版本路径,最后通过sort -u去除重复项——同一版本被多个符合条件标签标记时只显示一次
方案二:先筛选有效标签+批量查询+去重
先找出指定日期后创建的标签,再批量查询这些标签关联的版本并去重,执行效率更高:
# 第一步:获取28-Feb之后创建的标签 cleartool lstype -kind lbtype -invob MY_VOB -short -since 28-Feb > /tmp/valid_labels.txt # 第二步:批量查询标签关联版本并去重 cat /tmp/valid_labels.txt | xargs -I {} cleartool find . -version "lbtype({})" -print | sort -u
- 优势:仅处理符合日期条件的标签,避免遍历所有无效标签;用
xargs替代for循环,减少进程创建开销;sort -u彻底解决重复输出问题
原命令的问题
- 遍历所有标签(包括日期不符合的),执行效率低
- 循环执行多次
cleartool find,进程开销大 - 同一版本若被多个符合条件标签标记,会重复输出
内容的提问来源于stack exchange,提问作者F. J. Cobas Seoane
相关产品推荐
相关产品推荐

