【问题标题】:How to programatically get the latest commit date on a CVS checkout如何以编程方式获取 CVS 结帐的最新提交日期
【发布时间】:2019-01-24 04:33:06
【问题描述】:

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

我知道这不是 100% 保证的,因为 cvs 签出可以在不同的时间戳/修订/...处有不同的文件,但我认为在大多数情况下正确的解决方案是可以的。

我天真地以为

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

本来打算这样做,但事实证明它会遍历所有分支/标签的整个提交历史。

【问题讨论】:

    标签: cvs


    【解决方案1】:

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

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

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

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

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


    如果可以这样枚举整个base的文件集,

    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来完成)

    【讨论】:

    • 这也是我唯一能想到的,粗略地说。最后,我做了一个 cvs 日志,并为所有文件解析了它。对每个文件执行此操作会非常缓慢。
    • 我认为这不支持粘性日期,即它仍然会给出最近的日期而不是选择的日期。
    【解决方案2】:

    获取文件最新更改时间的更快方法(基于 nik 给出的答案)是:

    cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date
    

    如果您只想获取日期,请使用:

    cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date | sed 's/date: \([^ ]*\).*/\1/'
    

    这使用使用默认分支的 -b 标志和 -d 允许您告诉 CVS 在给定时间之前您只关心最新版本。 `` 表达式然后将当前日期作为限制传递给您最近的提交。

    在 gnuplot CVS 存储库中,使用 -d 标志可将执行时间从 ~4s 减少到 ~1.5s。

    【讨论】:

      【解决方案3】:

      我在寻找一种以编程方式通过标签在 CVS 中获取文件时间戳的方法时遇到了这个线程。其他答案就足够了,但我想添加自己的如下:

      cvs rlog -r<tag_or_revision> <file_path> | grep ^date | cut -c 7-25
      

      我注意到-r&lt;tag&gt; 之间不能有空格。似乎–r&lt;tag1&gt;:&lt;tag2&gt; 的一系列标签或修订也是合适的。

      我还想获取包含完整时间戳的日期,发现使用cut 对静态字符范围执行子字符串似乎比使用sed 更容易。

      最后,对于我的需要,最重要的是,我发现rlog 命令可以用作远程日志,而log 命令需要实际签出文件。在我的情况下,我只是想根据标签查找文件的时间戳,并且必须检查文件以执行日志的附加步骤是一个主要的威慑力,所以我只想添加rlog 命令可能有用满足您的需求。

      【讨论】:

        猜你喜欢
        • 2015-07-02
        • 2011-10-10
        • 1970-01-01
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多