2

我有一个修订哈希键。我想获得包含任何内容的最接近的修订版,但 .hgtags 除外。

例如,考虑 Mercurial 历史的以下片段:

D:\CI\NC\8.0>hg log -l3 -b 8.0 -v
changeset:   1768:633cf1f61665
branch:      8.0
tag:         tip
user:        ci
date:        Wed Nov 16 21:06:20 2011 +0200
files:       .hgtags
description:
Replaced tag 'good.NC.16' with 'rejected.NC.16' for changeset 9451e8f187b1


changeset:   1767:6cad328c622c
branch:      8.0
parent:      1765:9451e8f187b1
user:        ci
date:        Wed Nov 16 21:04:26 2011 +0200
files:       .hgtags
description:
Added tag 'good.NC.16' for changeset 9451e8f187b1


changeset:   1765:9451e8f187b1
branch:      8.0
tag:         rejected.NC.16
user:        gilad
date:        Tue Nov 15 18:26:09 2011 +0200
files:       .hgignore
description:
update

在这种情况下,如果给定的版本是633cf1f61665,那么我正在寻找该版本9451e8f187b1,因为它是最接近的版本,它不仅包含 .hgtags,还包含其他内容。

在给定的情况下633cf1f61665,我如何9451e8f187b1使用尽可能少的 hg.exe 调用来定位?

编辑

我已经修复了输出,它应该显示来自同一分支的修订。

编辑2

我会试着解释一下自己。让我们定义两个概念:

  • 一个沉闷的变更集 - 由hg tag操作创建的变更集。
  • 一个有趣的变更集 - 任何非枯燥的变更集。

所以,我的问题可以改写如下:

Given an arbitrary revision (dull or interesting) I need to find the closest
interesting revision belonging to the same named branch using as few hg invocations
as possible.

例如,给定633cf1f616656cad328c622c9451e8f187b1所需的修订是9451e8f187b1.

4

1 回答 1

5

尝试

$ hg log -r "max(::REV and not file(.hgtags))"

看看这是否符合您的要求。有关hg help revsets查询语言的更多信息,请参阅。

如果您经常使用它,您可以为此创建一个 revset 别名:

[revsetalias]
interesting($1) = max(::$1 and not file(.hgtags))

然后hg log -r "interesting(123)"在将来使用。

于 2011-11-17T10:10:36.193 回答