如何以编程方式获取CVS结帐时的最新提交日期

Tho*_*ele 9 cvs

对于我正在使用CVS实现二分法的脚本,我想弄清楚当前结账的"时间戳"是什么.换句话说,如果我在分支/标签上,我想知道最后一个时间戳被提交到该分支/标签.如果我在头上,我想知道头上的最后一个时间戳.

我知道这不是100%保证,因为cvs checkout可以在不同的时间戳/修订/ ...有不同的文件,但是大多数情况下正确的解决方案对我来说都很好.

天真的,我想到了

cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1
Run Code Online (Sandbox Code Playgroud)

将要做到这一点,但事实证明它贯穿整个提交历史,对于所有分支/标签.

nik*_*nik 3

分支上的 CVS 文件具有不同的时间戳,因此选择任何一个文件来获取该分支的最后时间信息的准确性几乎不值得。

但是,如果有一些文件经常更改,情况会更好。例如,在我的一个基地中,有一个version.h文件在每次版本转换(次要或主要)时都会更新。这可以用于当前版本的时间信息(同样不准确于分支中的所有文件,但它确实给出了底线)。

因此,如果您知道一个可以为您提供底线值的文件,

cvs log path/to/version.h -r branch/tag | grep ^date | sort | tail -1
Run Code Online (Sandbox Code Playgroud)

将为您提供该文件的最后时间戳。


如果你可以像这样枚举基础的整个文件集,

find /base/dir -type f | grep -v CVS > files.txt
Run Code Online (Sandbox Code Playgroud)

然后,您可以为每个文件循环执行上面的 cvs 命令,

rm -f allFiles.txt
for f in $(<files.txt); do cvs log $f ...etc... tail -1 >> allFiles.txt
sort allFiles.txt | tail -1
Run Code Online (Sandbox Code Playgroud)

排序的最后一行将为您提供最近提交的确切日期。
唉,你不会得到文件名(这也可以用更多的 fu 来完成)