8

在我的存储库中,我有表单的标签version-1.2.3。我想创建一个这样的 revset 别名new()

hg log -r 'new(1.2.3, 1.2.4)'

...并扩展为:

hg log -r '::version-1.2.4 - ::version-1.2.3'  # What's new in 1.2.4?

当我尝试这样做时:

[revsetalias]
new($1, $2) = ::version-$2 - ::version-$1

...Mercurial 将其解释为从修订中减去修订$2(例如1.2.3version,这不是我的意图。

我也试过这个,使用##连接运算符:

new($1, $2) = ::"version-" ## $2 - ::"version-" ## $1

但是然后hg log -r 'new(1.2.3, 1.2.4)'给了我这个错误:

hg: parse error at 13: syntax error

我也尝试使用ancestors()而不是::语法,但仍然出现语法错误。这可能吗?

4

2 回答 2

5

我测试了以下有效的方法:

new($1, $2) = (::"version-" ## $2) - (::"version-" ## $1)

供参考$1::$2不会给你同样的东西,这意味着和之间的修订$1$2 更喜欢的等效修订集是:

new($1, $2) = only("version-" ## $2, "version-" ## $1)

根据文档,它严格等同于您想要的:

"only(set, [set])"
      Changesets that are ancestors of the first set that are not ancestors of
      any other head in the repo. If a second set is specified, the result is
      ancestors of the first set that are not ancestors of the second set
      (i.e. ::<set1> - ::<set2>).
于 2015-06-20T04:53:19.470 回答
-1

旁注$1::$2将更具可读性并为您提供 DAG 的相同部分在所有情况下only()提供正确的结果,根据@lc2817 答案中的讨论,DAG 可能会失败)

我几乎成功地得到了答案,但在最后一步遇到了一些麻烦(并且不知道如何调试):在 [revsetalias] 中聚合所有

前言

因为参数是标签,并且 tag() 谓词允许在参数中使用正则表达式 - 我将使用它们

Revsettag("re:version\-")显示所有标签,以“version-”开头

使用硬编码数字作为字符串的 Revset 显示单个变更集

hg log -r "tag('re:version\-1.7$')
changeset:   2912:454a12f024f3

(尾随 $ 是强制性的,否则将是所有 1.7* 标签)

我在 revsetalias 中的最佳尝试是tag('re:version\-\$1$')- 没有错误也没有输出:我无法获得完全扩展的命令来查看所有处理和替换并使用参数化的 revsetalias 检测我的错误

高温高压

于 2015-06-20T04:48:05.150 回答