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

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

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

天真的,我想到了

cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1

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

分支上的CVS文档位于不同的时间戳,选择任何一个文档以获取分支的最后时间信息的准确性几乎不值得.

但是,如果有一些文档会经常更改,它会变得更好.

例如,在我的一个基础中,有一个version.h文档,它在每个版本转换(次要或主要)上更新.这可以用于当前版本的时间信息(再次对分支中的所有文档都不准确,但确实给出了底线).

所以,如果你知道一个可以给你一个底线值的文档,

cvs log path/to/version.h -r branch/tag | grep ^date | sort | tail -1

将为您提供该文档的最后时间戳.

如果你能像这样枚举基数的整个文档集,

find /base/dir -type f | grep -v CVS > files.txt

然后,你可以为每个文档循环上面的cvs命令,

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

排序的最后一行将为您提供最近提交的确切日期.

唉,你不会得到文档名(也可以用更多的fu来完成)

翻译自:https://stackoverflow.com/questions/1044651/how-to-programatically-get-the-latest-commit-date-on-a-cvs-checkout