1

我正在尝试创建一个 Ant 脚本,它将在 ClearCase 中创建一个标签,然后将该标签应用于最新版本没有标签的任何文件的最新版本。

我正在使用它来创建标签:

<ccmklbtype typename="${label.name}" failonerr="false" 
 ordinary="true" comment="${label.comment}"/>

当我使用它来添加标签时:

<ccmklabel viewpath="${view.path}" comment="${label.comment}" recurse="true"
 typename="${label.name}" replace="false" version="\main\${side.branch}\LATEST"/>

当然,它是将标签添加到视图路径中的所有内容。我想要的行为是仅在该项目在最新版本上还没有标签时才添加标签。

我可以通过命令提示符执行所需的操作,但我正在尝试查看是否可以通过 Ant 完成。

有没有人有任何想法?

看起来没有办法只标记还没有名字的东西。相反,我将其设置为在 ANT 中使用一个 exec 块,如果它尚未使用之前使用的标签之一进行标记,它将标记任何内容:

<target name="add_labels" description="Look for LATEST code that does not have a previous version label already on it.  Skip the 0 generation as that is brought in from a previous release.">
<exec executable="cleartool" dir="${view.path}">
<arg value="find" />
<arg value="." />
<arg value="-ver" />
<arg value="version(\main\${side.branch}\LATEST)&amp;&amp;!version(\main\${side.branch}\0)${history.check}" />
<arg value="-exec" />
<arg value="cleartool mklabel -replace ${label.name} %CLEARCASE_XPN%" />
</exec>
</target>

它似乎在测试中起作用。

4

1 回答 1

2

查看 的手册页ccmklabel,您会看到:

replace bool
如果true,则允许在同一分支上替换相同类型的标签。
默认值为false.

因此replace=true,如果一个文件在最新版本上没有标签,它将被放置(或移动到)所述LATEST版本。


OP ruminator的情况下,他只想在版本还没有标签的情况下添加标签。

2种方法是可能的:

  • ccmklabel在已经只选择了您要标记的版本的视图中。
    很难做到,因为配置规范中唯一可用的版本选择器\main\${side.branch}\'{!lbtype(MY_TEST)}是,它选择未标记为 ' MY_TEST' 的最后一个版本(并且不完全符合初始选择标准)

  • 不要在 ant 脚本中使用 ccmklabel,直接调用 insteald cleartool find 指令(比视图配置规范更精确,可以组合更多的版本选择器)。
    这就是OP 反刍者在他的问题更新中说明的内容:

find 查询侧重于LATEST没有正确标签的版本:

<exec executable="cleartool" dir="${view.path}">
  <arg value="find" />
  <arg value="." />
  <arg value="-ver" />
  <arg value="version(\main\${side.branch}\LATEST)&amp;&amp;!version(\main\${side.branch}\0)${history.check}" />
  <arg value="-exec" />
  <arg value="cleartool mklabel -replace ${label.name} %CLEARCASE_XPN%" />
</exec>
于 2012-08-10T20:20:09.847 回答