Mercurial:每个文件的最新更改

时间:2018-12-10 09:43:04

标签: mercurial

我正在寻找一种使Mercurial输出如下表的方法:

File        Most recent revision changing the file          Date of that revision
====        ======================================          =====================
foo.py      44159adb0312                                    2018-09-16 12:24
...         ...                                             ...

这就像github在“代码”概述页面上所做的一样。 (来自torvalds / linux的屏幕截图): screenshot github

“最近”可能是指日期或相对于当前变更集的DAG层次结构,或者可能是相对于当前分支的日期。也许后者更有用,但是在我的特定用例中,它没有什么作用。

我还希望能够提供我想要该表的文件列表或子目录。 (我并不一定想要所有内容)

我知道我可以使用一个小的脚本来遍历hg log -l 1 <file>,但是我想知道是否有更有效/更自然的解决方案。

3 个答案:

答案 0 :(得分:0)

更有效/更自然的解决方案可以是:

  • 为所需的日志输出创建模板|样式(我无法预测,对您来说哪种方法更好
  • ?mapplyhg log -l 1 --template ...创建别名

答案 1 :(得分:0)

Git将遵循提交DAG,因为仅此而已。在Mercurial中,您有(许多)更多选择,因为您有更多数据。

这里的理想选择可能是follow(file, .)(适当时结合firstlast)。但正如hg help revset会告诉您的那样,您有以下选择(我将列表缩小为明显的适用范围):

  • ancestors(set[, depth])

    例如,如果要在la Git之后执行DAG,则将set.一起使用以获取当前提交的祖先。或者,使用::.,基本上相同。

  • branch(string or set)

    将此值与.一起使用可获取当前分支中的所有提交。如果您不在当前分支的顶部,请与其他限制器(例如parents)结合使用,以避免查看当前分支中的后续提交。

  • file(pattern)

    将其与全局模式一起使用,以查找影响给定文件的变更集。

  • filelog(pattern)

    file类似,但速度更快,但为了提高速度而牺牲了一些准确性(有关详细信息,请参阅文档)。

  • follow([file[, startrev]])

    引用文档:

      

    "::."(工作目录的第一个父项的祖先)的别名。   如果指定了文件模式,则匹配给定文件的历史记录   遵循startrev给出的修订中的模式,包括   副本。

  • modifies(pattern)

    使用此命令(具有任何模式,而不仅仅是glob)来查找修改某些文件或目录的变更集。我认为这仅限于M类型的修改,而不是添加或删除文件,因为还有adds(pattern)removes(pattern)。一起使用or的这三个版本,以查找所有添加/修改/删除操作。

  • first(set, [n])
    last(set, [n])
    limit(set[, n[, offset]])

    使用它从修订集中提取特定条目。

向前搜索时(默认),last(follow(file, .))可以很好地找到正确的修订版。如您所述,您必须对每个文件执行一次操作-如果您编写自己的Mercurial插件来执行此操作,而又不一直重新加载系统的其余部分,无疑会更快。

答案 2 :(得分:0)

您将无法遍历所有文件。但是使用hg manifest,您可以获得该文件列表。然后根据需要对输出进行模板化:

for f in $(hg ma); do hg log -l1 $f -T"$f\t\t{rev}:{node|short}\t\t{date|isodate}"; done

这给出了类似的输出

.hgignore               38289:f9c426385853              2018-06-09 13:34 +0900
.hgsigs         38289:f9c426385853              2018-06-09 13:34 +0900
.hgtags         38289:f9c426385853              2018-06-09 13:34 +0900

您可能想进一步讨论输出格式。有关输出模板的完整概述,请参见mercurial wiki