如何以编程方式获取 CVS 结账的最新提交日期
对于我正在使用 CVS 实现二分的脚本,我想弄清楚当前结账的“时间戳”是什么。 换句话说,如果我位于分支/标签上,我想知道提交到该分支/标签的最后一个时间戳。 如果我在头上,我想知道头上的最后一个时间戳。
我知道这并不能 100% 保证,因为 cvs 签出可以在不同的时间戳/修订/...有不同的文件,但在大多数情况下正确的解决方案对我来说很好。
天真地,我认为这
cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1
会做到这一点,但事实证明它会遍历所有分支/标签的整个提交历史记录。
For a script I'm working on to implement bisection using CVS, I want to figure out what the 'timestamp' is of the current checkout. In other words, if I'm on a branch/tag, I want to know the last timestamp something got commited to that branch/tag. If I'm on head, I want to know the last timestamp on head.
I know this is not 100% guaranteed, since cvs checkouts can have different files at different timestamps/revisions/..., but a correct-in-most-cases solution is fine by me.
Naively, I thought that
cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1
was going to do it, but it turns out it goes through the whole commit history, for all branches/tags.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当我寻找一种通过标记以编程方式获取 CVS 中文件的时间戳的方法时,我遇到了这个线程。 其他答案就足够了,但我想添加自己的答案,如下所示:
我注意到
-r
和
之间不能有空格。 似乎一系列标签或修订版–r:
也是合适的。我还想获取包括完整时间戳的日期,并发现使用
cut
对静态字符范围执行子字符串似乎比使用sed
更容易。最后,最重要的是,对于我的需求,我发现 rlog 命令可用作远程日志,而 log 命令要求实际检出文件。 就我而言,我只是想根据标签查找文件的时间戳,而必须检查文件以执行日志的附加步骤是一个主要的阻碍,所以我只想添加 rlog > 命令可能对您的需要有用。
I came across this thread when looking for a way to grab the timestamp for a file in CVS via a tag programmatically. The other answers are sufficient but I wanted to add my own as follows:
I noticed that there cannot be a space between
-r
and<tag>
. It seems a range of tags or revisions as–r<tag1>:<tag2>
is also appropriate.I also wanted to get the date including the full timestamp and found that using
cut
to perform a substring on the static range of characters seemed easier than usingsed
.Finally, and most importantly for my needs I found that the
rlog
command works as a remote log, whereas thelog
command requires that the files are actually checked out. In my case I just wanted to lookup the timestamp for files based on a tag and the added step of having to check out the files to perform a log was a major deterrent so I just wanted to add that therlog
command may be useful for your needs.分支上的 CVS 文件具有不同的时间戳,因此选择任何一个文件来获取该分支的最后时间信息的准确性几乎不值得。
但是,如果有一些文件经常更改,情况会更好。
例如,在我的一个基地中,有一个
version.h
文件,该文件在每次版本转换(次要或主要)时更新。 这可以用于当前版本的时间信息(同样不准确于分支中的所有文件,但它确实给出了底线)。因此,如果您知道一个可以为您提供底线值的文件,
将为您提供该文件的最后时间戳。
如果您可以像这样枚举基础的整个文件集,
那么您可以为每个文件循环上面的 cvs 命令,
排序的最后一行将为您提供最近提交的确切日期。
唉,你不会得到文件名(这也可以用更多的 fu 来完成)
CVS files on a branch being at different timestamps, the accuracy of picking any one file to get the last time-info for the branch is hardly worth.
But, it can get better if there is some file which will be changed often.
For, example, in one of my bases, there is a
version.h
file which is updated on every version shift (minor or major). That can be used for time-info on the current version (again not accurate to all the files in the branch, but it does give a bottom line).So, if you know a file that can give you a bottom line value,
will give you the last timestamp for that file.
If you can enumerate the entire file set of the base like this,
then, you can loop the cvs command above for each file,
Last line of the sort will give you exact date for the most recent commit.
Alas, you will not get the file name (which can also be done with some more fu)
获取文件更改的最新时间的更快方法(基于 nik 给出的答案)是:
如果您只想获取日期,请使用:
这使用 -b 标志,该标志使用默认分支和 -d 标志允许您告诉 CVS 您只关心给定时间之前的最新版本。 然后 `` 表达式传递当前日期作为限制,为您提供最近的提交。
在 gnuplot CVS 存储库上,使用 -d 标志将执行时间从 ~4s 减少到 ~1.5s。
A faster way to get the latest time a file was changed (which builds upon the answer given by nik) is:
If you want to get only the date, use:
This uses the -b flag which uses the default branch and -d which allows you to tell CVS you only care about the latest version up until a given time. The `` expression then passes the current date as the limit, giving you the most recent commit.
On the gnuplot CVS repository, using the -d flag decreases the execution time from ~4s to ~1.5s.