哪些版本修改了特定功能

Which versions modified a particular function

我有一个包含超过 100 次提交(或签入)的 VOB 文件。

在所有这些提交中,有没有办法找出哪些版本(提交)修改了我感兴趣的特定功能?

文件的版本可以访问为/path/to/file@@main/<version_number>

由于您可以访问每个版本的 extended pathnames of the versioned file, you can use a cleartool diff -pred,所以从最新的版本开始。

可以考虑包含函数行的每个差异。

虽然可以通过 cleartool annotate 找到最新版本。

我会从 cleartool annotate 开始,也许使用 Visual Annotate 第三方工具(它比标准工具更深入一点)。

Annotate 会告诉您此版本从何处进行更改。您可能还必须对声明的源版本进行注释以获取完整的历史记录。

这需要元素类型支持注释,这限制了您只能使用文本文件类型。

另一种方法是利用虚拟文件系统接口并仅暴力提取信息。假设您有一个脚本,它只从名为 extract_function.sh 的整个文件中提取您感兴趣的函数(例如,可以像 sed -n '/^void your_function_name/,/^}/p' 一样简单),并假设没有短于 4 的标签字符,那么你可以运行下面的命令

$ cd /path/to/file@@main
$ for i in ? ?? ???; do /some/where/extract_function.sh $i > /some/where/your_function.$i; done
$ cd /some/where
$ md5sum your_function.* | uniq --check-chars=32 \
| awk '{print }'

这为您提供了修改了您感兴趣的功能的版本的基线。然后你可以通过 运行ning diff -u your_function.1 your_function.15 来比较它们。

VFS 界面是我在使用 clearcase 时非常非常喜欢的一件事;能够在命令行上访问所有版本控制信息真是太棒了。例如,如果您想关联上面找到的每个版本的签入时间,可以使用 ls.

轻松获得
$ cd /some/where
$ md5sum your_function.* | uniq --check-chars=32 \
| awk '{print }' | cut -d. -f2 > version-numbers
$ cd /path/to/file@@main
$ xargs ls -l < /some/where/version-numbers

这样就可以很容易地忽略比 x 年早的版本。